ホームページ >バックエンド開発 >PHPチュートリアル >PHP 正規表現で単語の境界が発生するのはどのような場合ですか?
PHP 正規表現の単語境界セマンティクス
PHP では、単語境界は、単語文字間の遷移と一致する b メタ文字を使用して実装されます ( w) および非単語文字 (W)。ただし、提供されたテスト ケースに示されているように、その動作は微妙な場合があります。
予期しない単語境界
テスト ケースでは、次の結果が期待されていました:
preg_match("/(^|\b)@nimal/i", "something@nimal", $match); // false preg_match("/(^|\b)@nimal/i", "something!@nimal", $match); // true
しかし、実際の結果は逆でした:
preg_match("/(^|\b)@nimal/i", "something@nimal", $match); // true preg_match("/(^|\b)@nimal/i", "something!@nimal", $match); // false
この異常は、単語文字 (w) から非単語文字 (W) への移行時に b メタ文字が一致するために発生します。 。最初のケース「something@nimal」では、「g」(単語文字)と「@」(非単語文字)の間に単語境界が発生し、一致します。ただし、2 番目のケース「something!@nimal」では、「!」の間に単語の境界がありません。
単語の先頭の一致
特定のシーケンスで始まる単語を一致させるには、次のものが存在することを確認する必要があります。ターゲットシーケンスの前の単語境界 (b)。たとえば、「@nimal」で始まる単語と一致させるには、次の正規表現を使用します。
preg_match("/(\b)@nimal/i", "something@nimal", $match); // true preg_match("/(\b)@nimal/i", "something!@nimal", $match); // false
この正規表現では、単語の境界 (b) により、単語文字からの遷移があることが保証されます。 「@nimal」の前に単語以外の文字を追加します。これは、「@nimal」で始まる単語には一致しますが、「ducat」など、途中に「@nimal」がある単語には一致しません。
以上がPHP 正規表現で単語の境界が発生するのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。