preg_replace在实际匹配(索引1)而不是整个字符串

时间:2018-05-13 18:33:21

标签: php regex preg-replace

考虑

preg_replace('/(lets go).*/', "going", "lets go somewhere")

它将输出:“go”,我想“去某个地方”。

preg_replace似乎替换使用第一个匹配,即整个字符串“let go somewhere”。如何使它忽略索引0并仅忽略目标索引1?

1 个答案:

答案 0 :(得分:5)

我不知道你想要与.*匹配什么。你不需要它。这样可以正常工作:

preg_replace('/(lets go)/', "going", "lets go somewhere");

或者你可以使用懒人匹配:

preg_replace('/(lets go).*?/', "going", "lets go somewhere");

说明:你的原始表达是贪婪的。这大致意味着.*匹配尽可能多的字符。 .*?很懒惰;它匹配最小字符数。

你也可以匹配某个地方'作为子模式,我们将其替换为:

preg_replace('/(lets go)(.*)/', "going\$2", "lets go somewhere");

下面。 $ 0是"让我们去某个地方",$ 1是"让我们去#34;,$ 2是"某处&#34 ;.需要反斜杠是因为"去\ $ 2"在双引号内。