PHP ' preg_replace '只替换一次


php `preg_replace` only replace once time?

preg_replace只替换一次?我想从一个句子中删除不需要的单词,为什么在这种情况下,"an"没有被替换?

http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

modifier部分

应该设置什么?

$items = "This is an apple... ";
echo preg_replace('/ an | is /i',' ',$items);
//This an apple...   

我需要返回"这个苹果…",谢谢。

用圆括号括起来,并用字边界('b)括起来:

$items = "This is an apple... ";
echo preg_replace('/'b(an|is)'b/i', ' ', $items);
//This     apple

您可以使用以下命令删除多余的空格:

$items = "This is an apple... ";
echo trim(preg_replace(array('/'b(an|is)'b/i', '/[ ]+/'), ' ', $items));
//                                              ^^^^^^
//This apple

另一个相同代码的例子:

$items = "An apple, this is";
echo trim(preg_replace(array('/'b(an|is)'b/i', '/[ ]+/'), ' ', $items));
//apple, this

正如@Mark B所评论的那样,您的regex没有给出预期的结果,因为第一次替换正在为[space]is[space]发生,并且从下一个匹配[space]an[space]中删除尾随空间,因此您得到This an apple...

下面是使用preg_replace的正确方法:

$items = "This is an apple... ";
echo '[' . preg_replace('/ *(?<= )(an|is)(?= ) */i', ' ', $items) . "]'n";
// OUTPUT: [This  apple... ]