将循环中的str_replace()更改为单个preg_replace()调用?

时间:2011-04-27 18:44:29

标签: php regex

如何将其更改为preg_replace()等效值(不使用循环)?

注意:$text是utf-8。

  do $text = str_replace("* *", "*", $text, $totRepla); while ($totRepla);

4 个答案:

答案 0 :(得分:2)

我认为匹配任意长* * * * * *的正则表达式模式是

/(\* )*\*/

请自行添加其余代码,我现在没有PHP方便提供完整的代码段。

答案 1 :(得分:1)

实际上,字符串函数比正则表达式更有效,如果你有一个使用str_replace的工作解决方案,我认为没有理由使用正则表达式。

http://php.net/manual/en/function.str-replace.php

见文档:

  

如果你不需要花哨的替换   规则(如正则表达式),你   应始终使用此功能   而不是preg_replace()。

答案 2 :(得分:0)

preg_replace('/\* \*/', '*', $totRepla);

答案 3 :(得分:0)

PCRE相当于:

$text = preg_replace('~(?:[*] )+[*]~', '*', $text);

您的代码表明您没有兴趣知道发生了多少替换,因此您不需要$totRepla变量。但是,如果我错了,这就是计算的方法:

$text = preg_replace('~(?:[*] )+[*]~', '*', $text, -1, $totRepla);