正規表現を使用して単語を照合する場合、特に単語に特殊文字が含まれている場合、b 境界パターンによって予期しない結果が生じることがあります。
「test Sortesindex[persons]{Sortes} text」というフレーズを考えてみましょう。 b
形式的には、b は単語文字 (w) と単語以外の文字の間の境界と一致します。 (W)、または文字列の先頭/末尾。単語境界パターンの直後に [ や } などの特殊文字が続く場合、 b には特殊文字の後の単語文字のみが必要です。
に対処するにはこの問題では、適応型単語境界または明確な単語境界を使用できます。
適応型単語境界 は、パターンの両側にある単語文字と単語以外の文字の任意の組み合わせを処理します。
re.search(r'(?:(?!\w)|\b(?=\w)){}(?:(?<=\w)\b|(?<!\w))'.format(re.escape('Sortes\index[persons]{Sortes}')), 'test Sortes\index[persons]{Sortes} test')
明確な単語境界 は、パターンの両側に単語文字を必要としません。
re.search(r'(?<!\w){}(?!\w)'.format(re.escape('Sortes\index[persons]{Sortes}')), 'test Sortes\index[persons]{Sortes} test')
適応型単語境界はより多用途になりますただし、先頭と末尾の非単語文字は許可されます。明確な単語境界はより厳密で、周囲に単語文字が存在しないようにします。
適応的で明確な単語境界に使用されるルックアラウンド パターンは、マッチング タスクの特定の要件に基づいてカスタマイズできます。たとえば、パターンの周囲の文字以外の文字のみを一致させるには、w.
の代わりに [^Wd_] を使用します。以上が正規表現の単語境界 (b) が特殊文字で誤動作するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。