正規表現にNOT演算子はありますか?その文字列のように:"(2001) (asdf) (dasd1123_asd 21.01.2011 zqge)(dzqge) name (20019)"
すべての\([0-9a-zA-z _\.\-:]*\)
を削除したいが、1年である(2001)
は削除したくない。
したがって、正規表現が返す必要があるのは(2001) name
でなければなりません。
注:\((?![\d]){4}[0-9a-zA-z _\.\-:]*\)
のようなものは機能しません((20019)
も何らかの形で一致します...)
いいえ、直接not演算子はありません。少なくともあなたが望む方法ではありません。
ただし、ゼロ幅の負の先読みを使用できます。
\((?!2001)[0-9a-zA-z _\.\-:]*\)
(?!...)
部分は、「テキストfollowing(したがってlookahead)thisdoes n't(したがって:負)これに一致しますが、実際には一致する文字を消費しません(したがって、幅ゼロ)。
実際には、2つの軸を持つ lookarounds の4つの組み合わせがあります。
完全ではありませんが、一般的には、通常、フォームのいずれかでいくつかの回避策を使用できます
[^abc]
、これはa
またはb
またはc
ではなく、文字ごとです。a(?!b)
、これはa
の後にb
が続かない(?<!a)b
、これはb
であり、a
の前にはありません