PHP preg_replace 削减我的 $subject 字符串
PHP preg_replace cuts of my $subject string
当我遇到以下问题时,我正在做我的这个项目。我有一个 link 去:
file.php?page=1&color=all&pos=all&nat=all&mine=all&tree=all
现在,我想将颜色更改为 'gold',所以我在 Google 上四处寻找,发现这个 php 函数称为 preg_replace()
。所以我在我的代码中这样实现了它:
$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
,所以它似乎以某种方式切断了代码的中间部分。
这是我期望的 link 输出:?page=1&color=gold&pos=all&nat=all&mine=all&tree=all
谁能告诉我我做错了什么?谢谢!
正则表达式 (regex) 是贪婪的。你说 "find color=" 然后 "get as much as you can until you see a &"。你要的是"get as much as you can as long as it is not a &"。那将是:
preg_replace('/color=[^&]*/','color=gold',$pre);
[^&] 表示 "anything except &"。另外 - 你没有使用匹配,所以你不需要括号。
当我遇到以下问题时,我正在做我的这个项目。我有一个 link 去:
file.php?page=1&color=all&pos=all&nat=all&mine=all&tree=all
现在,我想将颜色更改为 'gold',所以我在 Google 上四处寻找,发现这个 php 函数称为 preg_replace()
。所以我在我的代码中这样实现了它:
$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
,所以它似乎以某种方式切断了代码的中间部分。
这是我期望的 link 输出:?page=1&color=gold&pos=all&nat=all&mine=all&tree=all
谁能告诉我我做错了什么?谢谢!
正则表达式 (regex) 是贪婪的。你说 "find color=" 然后 "get as much as you can until you see a &"。你要的是"get as much as you can as long as it is not a &"。那将是:
preg_replace('/color=[^&]*/','color=gold',$pre);
[^&] 表示 "anything except &"。另外 - 你没有使用匹配,所以你不需要括号。