正则表达式不是运算符

Son*_*hut 73 java regex string

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)不知何故也匹配......)

Joh*_*erg 133

虽然通常你可以在其中一个表单上使用一些解决方法,但并不完全

  • [^abc],这不过是a,
  • 或否定前瞻:b,c后面没有a(?!b)
  • 或负面的lookbehind : a,之前b没有(?<!a)b

  • 否定查找(ahead|behind)还可以轻松否定多个字母,例如 `you(?!tube)` 或 `(?&lt;!docker)hub` (3认同)
  • 但是`[^ abc]`应该不是'a`或`b`或`c`,不是“不是字符串`abc`”。 (2认同)

Joa*_*uer 80

不,没有直接的非运营商.至少不是你希望的方式.

但是,您可以使用零宽度负向前瞻:

\((?!2001)[0-9a-zA-z _\.\-:]*\)
Run Code Online (Sandbox Code Playgroud)

(?!...)部分是指"仅当文本匹配以下(:先行因此)此.(因此:负)匹配该但它实际上并不消耗它匹配的字符(因此:零宽度).

实际上有4种外观与2个轴的组合:

  • lookbehind/lookahead:指定是否考虑点之前之后的字符
  • positive/negative:指定字符是否必须匹配或匹配.