php`preg_replace`只能替换一次?

时间:2013-04-25 19:08:04

标签: php preg-replace

preg_replace只能更换一次吗?我想从一个句子中删除不需要的词,为什么在这种情况下,“一个”还没有被取代?

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...   

我需要回复“这个苹果......”,而不是。

2 个答案:

答案 0 :(得分:3)

将它放在括号中并用单词边界(\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

答案 1 :(得分:0)

@Mark B评论你的正则表达式没有给出预期的结果,因为[space]is[space]发生了第一次替换,并且从下一个匹配[space]an[space]中删除了尾随空格,因此你得到{ {1}}。

以下是使用lookahead和lookbehind在您的案例中使用preg_replace的正确方法:

This an apple...