我问的问题可以通过谷歌搜索的小尝试来回答,但我找不到任何可以做到这一点的事情,所以我在这里问。请不要贬低并关闭它,它也可能对其他人有用:
我的问题是:我需要查找字符串的一部分,找到并替换它。但我的问题是字符串的那一部分每次都在变化,所以我需要注入一些正则表达式。
$url = "www.google.com/test=2";
replace the 'test=2' with 'test=1'
$result = "www.google.com/test=1"
事情是:slu to可以有1到20之间的任何数字:test=\d{1,20}
就是这种情况。我试过preg_replace
,substr_replace
,但没有一个能做到这一点。
答案 0 :(得分:4)
我看不出以下/test=\d+/
出了什么问题?我认为您的问题是您忘记了修饰符(在您的示例中为http://codepad.org/ZZNNr1bH,但您必须使用如下修饰符:http://codepad.org/9TEkPYJo)
<?php
$url = "www.google.com/test=2";
$result = preg_replace("/test=\d+/", "test=1", $url);
// ^ ^
var_dump($result);
?>
<强>更新强>:
那就像阿什利提到的那样,\d{1,20}
并不意味着“一到二十”,而是“任何数字字符重复1到20次”。
如果您只想要0-20的数字,请使用以下正则表达式:
/test=([0-9]|1[0-9]|20)/
基本上是指(0-9之间的数字或0-9或数字20之间的任何数字后跟的数字1)
它也可以缩短为
/test=(1?\d|20)/
含义(1次重复1次或0次,后跟0-9或20位数字)
答案 1 :(得分:1)
此外,\ d {1,20}将与1到20之间的数字不匹配,但是0和99,999,999,999,999,999,999这些不完全是我认为你想要的。
答案 2 :(得分:1)
$url = "www.google.com/test=2";
$replacement = 1;
echo preg_replace('/(.*test)=([1-20])/', "$1=1" ,$url);
如果我正确理解了这个问题,那应该这样做。
答案 3 :(得分:0)
$url = "website.com/test=1/asdasd/....";
$check= "test=1";
$newval = "test=2"
if(strstr($url,$check))
$result = preg_replace($check, $newval, $url);
如果值包含在字符串中,则可以替换它。