PHP正規表現の問題?
阿神
阿神 2017-05-16 13:07:23
0
1
393

正規表現を使用すると、次のような非常に奇妙な現象が見つかりました。

  • [--\ˇ]

< /p>

  • [_-\ˇ]

< /p>

  • [=-\ˇ]

< /p>

つまり、最初のものは文字と一致できませんが、2 つ目は文字と一致し、3 つ目は文字とスラッシュに一致します。

これらの特殊文字が文字列内に出現したときに置換したいだけです。この要件を達成するために他の記述方法を使用できることはわかっていますが、文字さえも置換されるとは予想していませんでした。なぜこのように書くことがそんなに奇妙なのかわかりません。このルールを説明しましょう。

なんてことだ、これらはまだある、通常の正規表現を書くのはとても難しい

  • [+-~]

  • [i-~]

  • [--~]

  • [_-~]

  • [=-~]

  • ...

興味がある場合は、hello w\o\r\l\d と一致させてみてください。

なぜこのようなことが起こっているのでしょうか?

阿神
阿神

闭关修行中......

全員に返信(1)
我想大声告诉你

まず、最初の例は合法的なレギュラーではないはずなので、結果はありません。

次の 2 つの例の正規表現は、最も基本的な [a-z] 構文であり、ある文字のすべての文字を別の文字エンコーディングに一致させることを意味します。

2 つの例では、開始文字は _=, 终止字符都是全角符号 ˇ です。
全角記号エンコーディングはすべての ASCII エンコーディングよりも大きいです。AscII エンコーディングと一致するとすべてが一致します。あまり考えずに、先頭文字の ASCII エンコーディングを確認してみましょう。

ASCII エンコード:
/ < 0-9 < = < A-Z < < _ < a-z

つまり、 [=-ˇ] 能匹配大写字母、反斜杠、小写字母,[_-ˇ] は小文字のみに一致し、スラッシュや数字には一致しません。


次に、このような奇妙な正規表現は保守が難しいため、書かない方が良いです。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート