0

我在问一个可以通过谷歌搜索来回答的问题,但我没有找到任何可以做到这一点的东西,所以我在这里问。请不要投票并关闭它,它也对其他人有用:

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

$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_replacesubstr_replace但他们都做不到。

4

4 回答 4

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);
?>

更新

也就是说,就像 Ashley 提到的那样,\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 的数字或数字 20)

于 2013-01-08T13:47:21.780 回答
1

此外, \d{1,20} 不会匹配 1 到 20 之间的数字,而是 0 和 99,999,999,999,999,999,999,这不是我认为你所追求的。

于 2013-01-08T13:49:58.937 回答
1
$url = "www.google.com/test=2";
$replacement = 1;
echo preg_replace('/(.*test)=([1-20])/', "$1=1" ,$url);

如果我正确理解了这个问题,这应该可以。

于 2013-01-08T13:56:57.160 回答
0
$url = "website.com/test=1/asdasd/....";
$check= "test=1";
$newval = "test=2"

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

if the value is contained inside the string, then it can be replaced.

于 2013-01-08T14:33:41.513 回答