php - 在字符串中搜索字符串并替换它

时间:2013-01-08 13:44:45

标签: php regex

我问的问题可以通过谷歌搜索的小尝试来回答,但我找不到任何可以做到这一点的事情,所以我在这里问。请不要贬低并关闭它,它也可能对其他人有用:

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

$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_replacesubstr_replace,但没有一个能做到这一点。

4 个答案:

答案 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);

如果值包含在字符串中,则可以替换它。