2

下面的代码应该用 K 替换所有没有跟 1 的 X,但它不能按预期工作。任何人都可以阐明问题可能是什么?谢谢!

<?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
4

1 回答 1

5

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

改用负前瞻(这不会是匹配本身的一部分,但只能确保 yourX后面没有 a 1):

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

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

于 2012-10-24T16:06:34.237 回答