正規表現の先読み、後読み、アトミックグループ 質問する

正規表現の先読み、後読み、アトミックグループ 質問する

正規表現の本文でこれらのものを見つけましたが、何に使用できるのか全くわかりません。どのように動作するかを理解できるように、例を持っている人はいませんか?

(?=) - positive lookahead
(?!) - negative lookahead
(?<=) - positive lookbehind
(?<!) - negative lookbehind

(?>) - atomic group

ベストアンサー1

次の文字列が与えられた場合foobarbarfoo:

bar(?=bar)     finds the 1st bar ("bar" which has "bar" after it)
bar(?!bar)     finds the 2nd bar ("bar" which does not have "bar" after it)
(?<=foo)bar    finds the 1st bar ("bar" which has "foo" before it)
(?<!foo)bar    finds the 2nd bar ("bar" which does not have "foo" before it)

これらを組み合わせることもできます:

(?<=foo)bar(?=bar)    finds the 1st bar ("bar" with "foo" before it and "bar" after it)

定義

前向きに前を向いて(?=)

式 B が続く式 A を検索します。

A(?=B)

ネガティブに先を見据える(?!)

式 B が続かない式 A を検索します。

A(?!B)

ポジティブな面を見る(?<=)

式 B が先行する式 A を検索します。

(?<=B)A

ネガティブな裏側を見る(?<!)

式 B が先行しない式 A を検索します。

(?<!B)A

原子団(?>)

アトミック グループはグループを終了し、グループ内で最初に一致したパターンの後の代替パターンを破棄します (バックトラックは無効です)。

  • (?>foo|foot)sに適用すると、foots最初の選択肢と一致しfoos直後に続かないため失敗し、バックトラックが無効になっているため停止します。

非アトミック グループではバックトラックが許可されます。後続の先行マッチングが失敗した場合は、式全体の一致が見つかるか、すべての可能性が尽きるまで、バックトラックして代替パターンを使用します。

  • (foo|foot)s適用されるfoots意志:

    1. 1 番目の選択肢 に一致しfoo、 が のs直後に続かないため失敗しfoots、2 番目の選択肢に戻ります。
    2. 2 番目の選択肢 に一致しfoot、 のs直後に成功してfoots停止します。

いくつかのリソース

オンラインテスター

おすすめ記事