正则expression式不是操作符

Regexes中是否有NOT运算符? 就像那个string: "(2001) (asdf) (dasd1123_asd 21.01.2011 zqge)(dzqge) name (20019)"

我想删除所有\([0-9a-zA-z _\.\-:]*\)但不是一年中的那个: (2001)

那么正则expression式应该返回的是(2001) name

注意:类似\((?![\d]){4}[0-9a-zA-z _\.\-:]*\)不适用于我( (20019)莫名其妙地匹配.. 。)

不,没有直接的不是操作员。 至less不是你所希望的。

但是,您可以使用零宽度的负向预测:

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

(?!...)部分的意思是“只有当后面的文本(因此:前瞻) 匹配(因此:负面)匹配这个匹配,但它实际上并不消耗匹配的字符(因此:宽度)。

实际上有两个轴与周围的 4个组合:

  • lookbehead / lookahead:指定是否考虑点之前之后的字符
  • 正面/负面:指定字符必须匹配还是不能匹配。

虽然一般情况下,您通常可以在其中一个表格上使用一些解决方法

  • [^abc] ,这不过是abc
  • 或负面的前瞻: a(?!b) ,这是a没有跟着b
  • 或负向后视: (?<!a)b ,这是b前面没有a