
特定のパターンを含むすべての行を表示する方法を見つけたいのですが、隣接する行 (前の行、次の行) は表示されません。
例えば、パターンは「PATTERN」という単語だとします。
1.#########################
2.#########パターン#########
3.##############################
2行目が有効になり、表示されます。
しかし
1.#########################
2.#########パターン#########
3.#########パターン#########
4.##############################
2行目と3行目は無効なので表示されません
答え1
次のように正規表現キャプチャ グループを使用します。
/\v%(PATTERN.*\n.*)@<!(PATTERN)%(.*\n.*\1)@!
恐ろしく見えるかもしれませんが、実は非常に簡単です。
\v
有効にするために使用されます「とても魔法のよう」正規表現(ほとんどの特殊文字にバックスラッシュの使用を避ける)PATTERN.*\n.*
はPATTERN
、その後に任意の文字、改行文字、そして再び任意の文字が続く(...)@<!
否定的な後読みのパターンです。つまり、欲しくない括弧の中に何があるかです。つまり、私たちの場合、ステップのすべては2
存在しないはずです(PATTERN)
これは実際の単語です。これは存在するはずです。将来の使用に備えて中括弧で囲みます。.*\n.*\1
は何でも、改行、また何でも、そしてキャプチャしたグループ(ステップを参照4
)%(...)@!
は否定的な先読みであり、前と同様に、中括弧内の内容は存在させたくないのです。
つまり、基本的にはPATTERN
次のようになります。
- を含む行が先行しない
PATTERN
- 次の行が続いていない
PATTERN