閉まっている。この質問はさらに焦点を絞る必要があります。現在回答を受け付けておりません。
この質問を改善したいですか?この投稿を編集して、1 つの問題のみに焦点を当てた質問を更新してください。
3 年前
に閉鎖されました。この質問を改善してください
複数行のファイル内で、間に特定の単語を含まない 2 つの単語の出現を検索する PCRE 正規表現を考えるのに助けが必要です。
以下の最初の例は、「foo」なので一致するはずです。 「bar」という単語なしで 2 回出現します。一方、2 番目の例は一致しないはずです。 「bar」という単語が 2 回出現します。
一致例:
フー
飛び降りた
以上
の
怠け者
ふー
一致しない例:
フー
飛び降りた
以上
の
バー
ふー
1
正規表現と重複する可能性があります: b が a と c の間に入らないようにする
– リザード チェコ語
2020 年 9 月 3 日 20:33
------------------------
あなたの質問は以前にも尋ねられたかもしれませんが、まったく同じではないかもしれません。ここでの 1 つのアプローチは、foo の出現間を照合するときに強化されたドットを使用して、途中でバーを越えないようにすることです。ドットオールモードを有効にして次の正規表現を実行してみてください。
\bfoo\b((?!\bbar\b).)*?\bfoo\b
デモ
これは使用される正規表現パターンの説明:
\bfoo\b match an initial "foo"
((?!\bbar\b).)*? match any content, including across newlines, provided
that we do not pass "bar" along the way
\bfoo\b match a final "foo"
利用可能なドットオールモードがない場合は、同様のパターンを使用してシミュレートできます。
\bfoo\b((?!\bbar\b)[\s\S])*?\bfoo\b
2
ご回答ありがとうございます。同じような動作する式を見つけたと思います: "foo(?:(?!bar).)*?foo"しかし、単語境界アサーションは良い追加です。
– dave_erie
2020 年 9 月 3 日 15:50
@dave_erie 上に貼り付けたものと私の答えの主な違いは、あなたのバージョンでは単語の境界を使用していないことです。パターンに誤検知がある可能性のあるサンプル データが存在する可能性があります。
– ティム・ビーゲライゼン
2020 年 9 月 3 日 15:52