2

以下のコードは、1 が続かないすべての X を K に置き換える必要がありますが、意図したとおりに機能しません。問題が何であるかについて誰かが光を当てることができますか? ありがとう!

<?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、正規表現エンジンが見つかった後、3 番目の文字で検索を続けます。

代わりに否定先読みを使用します (これは一致自体の一部ではありXませんが、 your の後に a が続かないことを保証するだけです1):

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

これにより、文字列の最後にある a を置き換えることもできXます (これは、実際には文字 ( a ではない) が必要なため、以前は機能[^1]しませんでした1)。

于 2012-10-24T16:06:34.237 に答える