如何匹配某个不包含某个单词的字符串?

时间:2013-07-19 18:33:57

标签: regex perl

我有一套非常具体的要求来定义我想要匹配的字符串,并且我有以下工作正则表达式:

/^#\s*([-a-zA-Z]+)(?=\s|$)/

匹配:'#keyword'...以及:'#Static keyword'

对于我的最终条件,我想忽略一个字符串,如果它包含单词:“Static”..我已经做了很多挖掘,我无法弄清楚这个。 以下是我最好的尝试:

/^#\s*(?!Static)([-a-zA-Z]+)(?=\s|$)/

然而,似乎我远离解决方案。

2 个答案:

答案 0 :(得分:5)

您需要在更多地方寻找Static,而不是在#和空白之后:

/^#\s*(?!.*Static)([-a-zA-Z]+)(?=\s|$)/

顺便说一下,您可能希望将(?=\s|$)替换为\b(一个字母数字后匹配的word boundary anchor)。如果标点符号或除空白之外的其他内容用于界定您匹配的单词,那么这也会匹配。

答案 1 :(得分:0)

您可以使用:

/^(?>[^S]++|S++(?!tatic\b))+$/

或者这允许“electroStatic”:

/^(?>[^S]++|\BS++|\bS(?!tatic\b))+$/