1. ホーム
  2. regex

[解決済み] Regex not 演算子

2022-03-12 14:22:30

質問

RegexesにNOT演算子はありますか? この文字列のように: "(2001) (asdf) (dasd1123_asd 21.01.2011 zqge)(dzqge) name (20019)"

をすべて削除したい。 \([0-9a-zA-z _\.\-:]*\) が、年号になっているものはダメです。 (2001) .

ということは、正規表現が返すべきものは、こうでなければならない。 (2001) name .

注:以下のようなもの \((?![\d]){4}[0-9a-zA-z _\.\-:]*\) は私の場合うまくいきません( (20019) もなぜかマッチします...)

解決方法は?

いいえ、直接的なnot演算子はありません。少なくとも、あなたが望むような方法はありません。

ただし、ゼロ幅の負のルックヘッドを使用することは可能です。

\((?!2001)[0-9a-zA-z _\.\-:]*\)

(?!...) の部分は、「テキストが 以下 (したがって、ルックアヘッド) これは はしません。 (だから否定的)にマッチします。しかし、実際には 消費する という文字にマッチします(したがって、ゼロ幅)。

の組み合わせは、実際には4通りあります。 ルックアラウンド を2軸にしたものです。

  • lookbehind / lookahead :文字が、(1)と(2)のどちらであるか指定します。 または を考慮します。
  • 正 / 負 : 文字が正であるか負であるかを指定します。 が必要です。 と一致するか はしてはならない にマッチします。