使用preg_replace仅替换第一个匹配项

dea*_*eef 52 php regex preg-replace

我有一个结构类似于的字符串:'aba aaa cba sbd dga gad aaa cbz'.字符串每次都可能有点不同,因为它来自外部源.

我想只替换第一次出现'aaa'但不替换其他出现.可能吗?

Pau*_*aul 100

preg_replace的可选第四个参数是limit:

preg_replace($search, $replace, $subject, 1);
Run Code Online (Sandbox Code Playgroud)

  • @josesanchez如果字符串不是太长你可以使用strrev反转它,并使用这个技巧但搜索你想要找到的模式的反向,然后再次反转字符串.如果它很长,你会想要反向扫描它,以避免两次反转字符串的开销 (2认同)

cod*_*ict 10

您可以使用for 的limit参数preg_replace并将其设置1为最多一次替换:

$new = preg_replace('/aaa/','replacement',$input,1);
Run Code Online (Sandbox Code Playgroud)