当我遇到以下问题时,我正在研究我的这个项目。我有一个链接:
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
任何人都可以告诉我这是错的吗?谢谢!
答案 0 :(得分:2)
正则表达式(正则表达式)是贪婪的。你说“找到颜色=”,然后“尽可能多地获取,直到你看到&”。你想要的是“只要它不是&”就能尽可能多地获得。那将是:
preg_replace('/color=[^&]*/','color=gold',$pre);
[^&]表示“除&”之外的任何内容。此外 - 您没有使用匹配,因此您不需要括号。