負の後読み正規表現に問題があります。stackoverflow の結果を読みましたが、よくわかりません。
私はゲームサーバーを運営しており、ユーザーのチャットを読み取り、禁止ワードを使用したユーザーをキックするツールを持っています。このツールは、PERL 正規表現エンジンを使用します。
私の禁止用語は、「バッグ」または「ディガー」の一般的な派生語だとしましょう。次の正規表現を使用して、これらの単語を含むチャット ラインを照合できます。
(?i)(digg|bag)(?-i)
私の実際のリストには他の単語があります。
ただし、最初に警告を提供したいと思います。これはチャットに次のように表示されます。
所有者:「ディガー」とは言わないでください
そのため、"Owner:" が前にある場合、禁止単語リストと一致しないように否定後読みを使用してみました - ただし、":" と禁止単語の間に使用する正確なテキストを指定した場合にのみ機能します言葉 - 私はいつもするわけではなく、しばしば誤って自分自身と一致します.
私は使用しようとしました:
(?<!Owner\:)/s*(?i)(digg|bag)(?-i)
空白しかない場合に機能しますが、私が本当に欲しいのは一致しないことです:
所有者:ディガー
所有者: ディガー
所有者: 侮辱としてバッグを使用しないでください
所有者:(その他はこちら)dig
などですが、次のように一致します。
(その他):(コロンの後に続くものに関係なく、禁止された単語)
ゼロ幅のアサーション (頭を包むことができない) が原因で、この構文で必要なことが可能であるかどうか、または正規表現 fu が単に弱いかどうかはわかりません。
いくつかのチュートリアルを試し、regex101 パーサーを使用しましたが、必要なものがまったく得られません。助けてください。