正規表現の本文でこれらのものを見つけましたが、何に使用できるのか全くわかりません。どのように動作するかを理解できるように、例を持っている人はいませんか?
(?=) - 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
最初の選択肢と一致しfoo
、s
直後に続かないため失敗し、バックトラックが無効になっているため停止します。
非アトミック グループではバックトラックが許可されます。後続の先行マッチングが失敗した場合は、式全体の一致が見つかるか、すべての可能性が尽きるまで、バックトラックして代替パターンを使用します。
(foo|foot)s
適用されるfoots
意志:- 1 番目の選択肢 に一致し
foo
、 が のs
直後に続かないため失敗しfoots
、2 番目の選択肢に戻ります。 - 2 番目の選択肢 に一致し
foot
、 のs
直後に成功してfoots
停止します。
- 1 番目の選択肢 に一致し