ホームページ  >  記事  >  バックエンド開発  >  PHP 正規表現で単語の境界が発生するのはどのような場合ですか?

PHP 正規表現で単語の境界が発生するのはどのような場合ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-21 07:27:02157ブラウズ

When Do Word Boundaries Occur in PHP Regular Expressions?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。