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

preg_replace on the actual match ( index 1) instead of whole string

考虑

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

会输出:"going",我要"going somewhere"。

preg_replace 似乎使用第一个匹配项替换整个字符串 "lets go somewhere"。我怎样才能让它忽略索引 0 而只针对索引 1?

我不知道你想用.*匹配什么。你不需要它。这将正常工作:

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

或者您可以使用惰性匹配:

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

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

你也可以匹配 'somewhere' 作为子模式,并在替换中使用它:

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

这里。 $0 是 "lets go somewhere",$1 是 "lets go",$2 是“某处”。需要反斜杠,因为 "going$2" 在双引号内。