2013-01-08 204 views
0

我在问这个问题可以通过一个小的尝试在Google上找到答案,但我找不到任何可以做到这一点的东西,所以我在这里问。请不要downvote并关闭它,它可能对其他人有用:php - 在字符串中搜索字符串并替换

我的问题是:我需要寻找字符串的一部分,并找到并替换。但我的问题是,那部分字符串每次都在改变,所以我需要注入一些正则表达式。

$url = "www.google.com/test=2"; 
replace the 'test=2' with 'test=1' 
$result = "www.google.com/test=1" 

事情是:芯子可以具有1之间的任何数 - 20:test=\d{1,20}是这种情况。我试过preg_replace,substr_replace但他们都不能做到这一点。

+0

向我们展示你试过 –

+0

确切的代码这里就是我想http://codepad.org/ZZNNr1bH – doniyor

+0

你面临的问题是你必须在调用的preg_replace您 – Dale

回答

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的数字或数字1的任何数字,后跟0-9或数字之间20)

它也可以被缩短到

/test=(1?\d|20)/ 

含义(1重复1或0次,随后通过一个数字0-9 OR 20的数量)

+0

酷男,那是点;) – doniyor

1

此外,\ d {1,20}与1和20之间的数字不匹配,但与0和99,999,999,999,999,999,999之间的数字不匹配,这不完全是我认为您所追求的。

+0

它会匹配什么呢?我不是正则表达式大师 – doniyor

+0

@ doniyor它将匹配重复1-20次的任何数字字符(0-9)。 – h2ooooooo

+0

哦糟糕的选择:)。感谢您的指导!所以\ d +是最好的吗? – doniyor

1
$url = "www.google.com/test=2"; 
$replacement = 1; 
echo preg_replace('/(.*test)=([1-20])/', "$1=1" ,$url); 

如果我理解正确的问题,应该这样做。

0
$url = "website.com/test=1/asdasd/...."; 
$check= "test=1"; 
$newval = "test=2" 

if(strstr($url,$check)) 
    $result = preg_replace($check, $newval, $url); 

如果该值包含在字符串内部,则可以将其替换。