正则表达式匹配字符串不以我开头
对于PMD,我希望有一条规则警告我那些以我的开头的丑陋变量。这意味着我必须接受所有不以我开头的变量。正则表达式匹配字符串不以我开头
所以,我需要一个正则表达式(RE),其行为如下:
re.match('myVar') == false
re.match('manager') == true
re.match('thisIsMyVar') == true
re.match('myOtherVar') == false
re.match('stuff') == true
我已经尝试了不同的人(这里将稍后一一列举了,对不起,没有进入他们现在),但避风港”没有得到它的工作。
您可以像使用其他人所建议的那样使用超前断言。或者,如果你只是想使用基本的正则表达式语法:
^(.?$|[^m].+|m[^y].*)
此匹配较长(^.?$
),因此不能my
零个或一个字符的字符串。或者有两个或更多字符的字符串,当第一个字符不是m
时,可能会有更多字符(^[^m].+
);或者如果第一个字符是m
,则不能后面跟着y
(^m[^y]
)。
这是我们现在可以使用的一个。似乎扩展正则表达式存在问题,但现在这个工作正常。 – 2010-01-22 11:21:45
^(?!my)\w+$
应该工作。
它首先确保在字符串的起始处不可能匹配my
,然后匹配字母数字字符直到字符串结束。字符串中任何位置的空格将导致正则表达式失败。取决于你的输入,你可能想要在字符串的前面和后面去掉空格,然后把它传递给正则表达式,或者使用可选的空白匹配器添加正则表达式,如^\s*(?!my)(\w+)\s*$
。在这种情况下,反向引用1将包含变量的名称。
如果你需要确保你的变量名称具有一定的字符组开始,说[A-Za-z_]
,使用
^(?!my)[A-Za-z_]\w*$
注意的变化,从+
到*
。
/^(?!my).*/
(?!expression)
是负向前瞻;它匹配expression
不匹配的位置匹配从该位置开始匹配。
做一个积极的匹配和拒绝这些字符串不会明显更具可读性 - 而不是匹配否定字符串来接受?
/^my/
这会更容易,但它是()需要一个规则,当检查代码时提交到一个存储库,因此该逻辑不能“恢复”。 – 2011-09-13 06:59:11
我认为其实应该是后面的负看看(不定向排除)。 – Indrit 2011-09-12 16:15:58