2010-06-03 3924 views
21

我用正则表达式将我的头撞在墙上。我试图定义一个完全排除这个文本'系统'的表达式(不区分大小写),但可以包含'System'一词,只要它不是这样。正则表达式不等于字符串

实例:

  • 系统== INVALID
  • SYSTEM == INVALID
  • 系统== INVALID
  • 系统== INVALID
  • ASD系统==有效
  • ASD系统asd ==有效
  • 系统asd ==有效
  • ASD系统==有效
  • ASD ==有效

回答

38

试试这个:

^(?!system$) 

还是这整个线路符合:

^(?!system$).*$ 

正则表达式具有负在其开始处向前看,如果“系统”是整个字符串,则不匹配。

+0

只是出于好奇,怎么样?!操作员工作?我从来没有使用过那个(尽管我用了很多正则表达式,我倾向于找到不使用“不”的解决方案)。 – Alxandr 2010-06-03 09:30:24

+1

啊,太简单了!我确信我尝试过......!谢谢。 – Kieron 2010-06-03 09:32:42

+1

@Alxandr - 它会检查当前位置后面的内容。例如,'c(?!4)'将匹配来自'Doc12'的c,但不匹配'Doc42'上的c。环视无法捕获,因此我不必担心替换数字,或者检查边缘情况(例如,如果c是最后一个字符:'Doc')。 – Kobi 2010-06-03 09:36:18

4

拒绝,如果匹配^system$(确保i标志为ON)。

+0

这应该是第一个选项,或当然。我自然地(可能错误地)认为OP不能这样做。 – Kobi 2010-06-03 09:32:35

1
^$|^.{1-5}$|.{7}|^[^s]|^.[^y]|^..[^s]|^...[^t]|[^e].$|[^m]$ 

但是,如果可以,请使用amarghosh的答案。

(根据以下建议更新)

+0

你可能是指'。{1,5}'。 – Kobi 2010-06-03 09:46:17

+0

嘿,我写了没有测试它。我有点震惊,它实际上第一次尝试。前两个条款是多余的,因此: (^。{1-6} $)|(。{8})|(^ [^ s])|(^。[^ y])|(^ .. [^ s])|(^ ... [^ t])|([^ e]。$)|([^ m] $) Nice tip about?!虽然 - 我没有听说过它。 – 2010-06-03 09:46:36

+0

oops。该正则表达式允许通过“systuem”。 (并且空字符串失败,这显然是可以接受的吗?) 尝试: ^ $ | ^。{1-5} $ |。{7} |^[^ s] | ^。[^ y] |^.. [^ s] |^... [^ t] | [^ e]。$ | [^ m] $ – 2010-06-03 09:51:23