1. ホーム
  2. regex

[解決済み] 特定の文字が後にない'単語'を探す

2022-02-17 15:51:59

質問

を検索するための正規表現は何ですか? word という文字列が続いていない @ 記号を使用しますか?

例えば、こんな感じです。

mywordLLD         OK
myword.dff        OK
myword@ld         Exclude

解決方法は?

その (?!@) ネガティブ ルックアヘッド を作ることになります。 word が一致する場合のみ @ が表示されない場合 の直後に word :

word(?!@)

があるときにマッチを失敗させる必要がある場合 word の後に文字/文字列が続く場合 の右側にある の場合、以下の3つのどれを使ってもよい。

word(?!.*@)       # Note this will require @ to be on the same line as word
(?s)word(?!.*@)   # (except Ruby, where you need (?m)): This will check for @ anywhere...
word(?![\s\S]*@)  # ... after word even if it is on the next line(s)

参照 デモ

この正規表現は word の部分文字列と (?!@) がないことを確認します。 @ の直後で、もしそれがあれば word はマッチとして返されない(つまり、マッチした 失敗 ).

から 正規表現.info :

<ブロッククオート

ネガティブ・ルックアヘッド は、何かに続いていないものをマッチさせたい場合に必要不可欠なものです。を説明する場合 文字クラス , のマッチングに否定された文字クラスが使えない理由を説明しました。 q の後に u . 負のルックアヘッドが解決策を提供します。 q(?!u) . 負のルックアヘッド構成は 2つの括弧があり、開括弧の後にクエスチョンマークとエクスクラメーションポイントがあります。 .

そして 文字クラス のページをご覧ください。

否定された文字クラスは、依然として文字と一致しなければならないことを覚えておくことが重要です。 q[^u] を意味するものではありません。 q が付いていない u "です。という意味です。 q でない文字が続くと u "です。とは一致しません。 q という文字列の中に Iraq . これは q の後のスペースは q のイラクは国です。確かに:スペースは全体のマッチの一部になります、なぜならそれは"文字が u 上記の正規表現で否定された文字クラスがマッチするのは "です。もしこの正規表現が q のみであり q という文字列がありますが、両方の文字列で 負のルックアヘッド : q(?!u) .