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

And*_*ers -3 php regex preg-replace

考虑

preg_replace('/(lets go).*/', "going", "lets go somewhere")
Run Code Online (Sandbox Code Playgroud)

它将输出:"前进",我想"去某个地方".

preg_replace似乎用第一个匹配替换,这是整个字符串"让我去某个地方".如何使它忽略索引0并仅忽略目标索引1?

jh1*_*711 5

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

preg_replace('/(lets go)/', "going", "lets go somewhere");
Run Code Online (Sandbox Code Playgroud)

或者你可以使用懒惰的比赛:

preg_replace('/(lets go).*?/', "going", "lets go somewhere");
Run Code Online (Sandbox Code Playgroud)

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

您还可以将"某处"匹配为子模式,并将其替换为替换:

preg_replace('/(lets go)(.*)/', "going\$2", "lets go somewhere");
Run Code Online (Sandbox Code Playgroud)

这里.0美元是"让我们去某个地方",1美元是"放手",2美元是"某处".需要反斜杠,因为"go\$ 2"在双引号内.