PHP preg_replace只在字符串中替换一次

时间:2011-10-14 12:50:38

标签: php preg-replace

为什么preg_replace只在字符串中替换我搜索过的字符串一次?

我有一个字符串“Hello ------ World”。

我用这个

preg_replace( '#--#', '-', 'Hello------World');

但是preg_replace返回“Hello --- World”。因此,它取代了第一次出现,并继续不检查是否仍然存在 - 如何将“Hello ------ World”变为“Hello-World”?

2 个答案:

答案 0 :(得分:3)

您所看到的是正确的行为。正则表达式匹配两个破折号,用一个替换它们,然后搜索。再次找到两个破折号,用一个替换它们。所以六个破折号将成为三个破折号。

解决方案是匹配多个短划线,然后用一个破折号替换:

preg_replace( '#--+#', '-', 'Hello------World');

正则表达式中的+将匹配至少一个短划线,但尽可能多地匹配这些字符。更具体地说,它匹配所有破折号,直到字符串中出现非短划线。因此,它现在将找到所有六个短划线,用一个短划线替换它们,并搜索以找到更多破折号。

答案 1 :(得分:-2)

我认为你需要在regexp中添加一个全局标志,否则它只匹配字符串的第一次出现。 比如preg_replace('# - #/ g',' - ','Hello ------ World');什么