2011-09-06 97 views
44

在正则表达式中有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)某种程度上也符合...)

+0

我不知道我明白你想匹配什么(或为什么你把所有的那些parens围绕纯文本) – Mat

+1

有一个类似于上面的字符串,我想正则表达它,正则表达式的结果是:“(2001)名称”。 – Sonnenhut

回答

51

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

可以使用,但是零宽度负先行,:

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

(?!...)部分是指“只匹配如果文本以下(因此:先行)此(因此:但它实际上并没有消耗它匹配的字符(因此:零宽度)。

实际上有lookarounds与2个轴的组合:

  • 回顾后/前瞻:指定是否字符后点被认为是
  • 正/负前:如果指定字符必须匹配或不得匹配。
+0

谢谢你?!也是我的建议,但无论如何,如果我使用'\((?![\ d] {4})[0-9a-zA-z _ \。\ - :] + \)'还有'( 20019)'在里面 – Sonnenhut

+0

在编辑你的问题时,你把'{4}'*放在了前面,并且在这个评论中你把它放在里面*:你试过了哪一个?另外:如果你想让'(20019)'匹配,那么你必须在你的前视图中加入'\)'*:'\((?![\ d] {4} \))[0-9a-zA -z _ \。 - - :] + \)' –

+0

在评论中使用上面的正则表达式,它可以工作。但我不明白......我不明白你为什么要逃避以下部分:“((?![[d] {4} - > \)< - )[0-9a-zA -z _ \。\ - :] + \)''然后有一个支架没有关闭,不是吗? – Sonnenhut

88

不完全是,虽然一般通常可以使用一些替代方法的一种形式

  • [^abc],这是什么,但abc
  • 或负前瞻:a(?!b),这是不跟b
  • 或负回顾后:(?<!a)b,这是b没有a
+0

是的,我认为负面后顾是(?<!a)b - 参考:http://www.regular-expressions.info/lookaround.html – jankins

相关问题