下面的代码应该替换所有X后面没有一个带K的1, 但它没有按预期工作。任何人都可以对这个问题有所了解吗?谢谢!
<?php
$test = "XXXX X1 X2 XXX X1";
$test = preg_replace("/X([^1])/", 'K$1', $test);
echo $test;
?>
Input: XXXX X1 X2 XXX X1
Expected output: KKKK X1 K2 KKK X1
Actual output: KXKX X1 K2 KXK X1
答案 0 :(得分:5)
匹配不能重叠。因此,在找到XX
后,正则表达式引擎将继续搜索第三个字符。
使用否定前瞻(这不会是匹配本身的一部分,但只能确保X
后面没有1
):
$test = preg_replace("/X(?!1)/", 'K', $test);
这也会使你在字符串工作的最后替换X
(以前不会有效,因为[^1]
要求实际上有一个字符(不是{{1} }})。