PHP preg_replace剪切我的$ subject字符串

时间:2015-03-24 14:32:05

标签: php regex url preg-replace

当我遇到以下问题时,我正在研究我的这个项目。我有一个链接:

file.php?page=1&color=all&pos=all&nat=all&mine=all&tree=all

现在,我想将颜色改为' gold'所以我环顾谷歌,发现这个名为preg_replace()的php函数。所以我在我的代码中实现了它:

$pre='?page=1&color=all&pos=all&nat=all&mine=all&tree=all'; preg_replace('/color=(.*)&/', 'color=gold&', $pre);

出于某种原因,我的输出是?page=1&color=gold&tree=all所以它似乎以某种方式削减了代码的中间位置。

这是我期望作为输出的链接:?page=1&color=gold&pos=all&nat=all&mine=all&tree=all

任何人都可以告诉我这是错的吗?谢谢!

1 个答案:

答案 0 :(得分:2)

正则表达式(正则表达式)是贪婪的。你说“找到颜色=”,然后“尽可能多地获取,直到你看到&”。你想要的是“只要它不是&”就能尽可能多地获得。那将是:

preg_replace('/color=[^&]*/','color=gold',$pre);

[^&]表示“除&”之外的任何内容。此外 - 您没有使用匹配,因此您不需要括号。