RegEx匹配字符串不以my开头

时间:2010-01-22 09:44:20

标签: regex regex-negation pmd

对于PMD我想有一个规则,警告我那些从我的开始的丑陋变量。这意味着我必须接受所有不以我的开头的变量。

所以,我需要一个RegEx(re),其行为如下:

re.match('myVar')       == false
re.match('manager')     == true
re.match('thisIsMyVar') == true
re.match('myOtherVar')  == false
re.match('stuff')       == true

我尝试了不同的(稍后会在这里列出,对不起,现在无法访问它们),但还没有让它工作。

4 个答案:

答案 0 :(得分:133)

^(?!my)\w+$

应该有用。

它首先确保不能在字符串的开头匹配my,然后匹配字母数字字符直到字符串的结尾。字符串中任何位置的空格都会导致正则表达式失败。根据您的输入,您可能希望在将字符串传递给正则表达式之前删除字符串前面和后面的空格,或者使用像^\s*(?!my)(\w+)\s*$这样的正则表达式添加可选的空格匹配器。在这种情况下,反向引用1将包含变量的名称。

如果您需要确保变量名称以特定字符组开头,例如[A-Za-z_],请使用

^(?!my)[A-Za-z_]\w*$

请注意从+*的更改。

答案 1 :(得分:46)

/^(?!my).*/

(?!expression)是一个负面的预测;它匹配expression 在该位置开始不匹配的位置。

答案 2 :(得分:35)

您可以像其他人建议的那样使用前瞻断言。或者,如果您只想使用基本的正则表达式语法:

^(.?$|[^m].+|m[^y].*)

这匹配长度为零或一个字符(^.?$)的字符串,因此不能为my。或者包含两个或多个字符的字符串,当第一个字符不是m时,可能会跟随(^[^m].+);或者,如果第一个字符是m,则y^m[^y])不得跟随。

答案 3 :(得分:5)

进行肯定匹配并拒绝这些字符串会不会显着更具可读性 - 而不是匹配否定字符串来接受?

/^my/