[解決済み】Regexのlookahead、lookbehind、atomic groupについて
2022-03-28 06:54:23
質問
regex bodyにこれらのものがありましたが、何に使えるのかさっぱりわかりません。 どなたか例を挙げて、どのように機能するのか理解できる方はいらっしゃいますか?
(?!) - negative lookahead
(?=) - positive lookahead
(?<=) - positive lookbehind
(?<!) - negative lookbehind
(?>) - atomic group
解決方法は?
事例紹介
文字列
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
は、その第1候補にマッチします。foo
として失敗します。s
がすぐに続かず、バックトラックが無効になっているため停止します。
非アトミックグループはバックトラックを許可します。後続のマッチングが失敗した場合、式全体にマッチするか、すべての可能性がなくなるまで、バックトラックして代替パターンを使用します。
-
(foo|foot)s
に適用されます。foots
になります。-
第1選択肢に一致
foo
として失敗します。s
にはすぐには続きません。foots
で、その2番目の選択肢に戻る。 -
その第2候補にマッチする
foot
として成功します。s
のすぐ後に続くfoots
で、停止します。
-
第1選択肢に一致
いくつかのリソース
オンラインテスター
関連
-
[解決済み】改行を含む任意の文字にマッチする正規表現
-
[解決済み] | の後をすべて削除する正規表現 (| と共に)
-
[解決済み] Kibanaクエリの完全一致
-
[解決済み] 正規表現で任意の文字数を表す記号?
-
[解決済み] アドレスフィールド検証のための正規表現
-
[解決済み] regex オプションのワードマッチ
-
[解決済み] 正規表現ネガティブルックアヘッド
-
[解決済み] TCL/EXPECTで$expect_outを使用して変数を割り当てるにはどうすればよいですか?
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】正規表現における括弧のエスケープについて
-
[解決済み] MACアドレスの正規表現とは何ですか?
-
[解決済み] Regex Last occurrence?
-
[解決済み] 正規表現で特定の単語を否定する方法は?重複
-
[解決済み] RegEx: 引用符で囲まれた値を取得する
-
[解決済み] Regex空の文字列または電子メール
-
[解決済み] 正規表現で複数行にまたがる任意の文字にマッチさせるにはどうしたらよいですか?
-
[解決済み] 正規表現 AND 演算子
-
[解決済み] 正規表現における角括弧と括弧の違いは何ですか?
-
[解決済み] 01-12]レンジが期待通りに動作しないのはなぜですか?