超级简单的正则表达式(preg_replace)不起作用

时间:2012-10-24 16:02:30

标签: php regex regex-negation

下面的代码应该替换所有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

1 个答案:

答案 0 :(得分:5)

匹配不能重叠。因此,在找到XX后,正则表达式引擎将继续搜索第三个字符。

使用否定前瞻(这不会是匹配本身的一部分,但只能确保X后面没有1):

    $test = preg_replace("/X(?!1)/", 'K', $test);

这也会使你在字符串工作的最后替换X(以前不会有效,因为[^1]要求实际上有一个字符(不是{{1} }})。