117

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

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

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

我尝试了不同的方法,但还没有工作。

4

4 回答 4

202
^(?!my)\w+$

应该管用。

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

如果你需要确保你的变量名以某组字符开头,比如[A-Za-z_],使用

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

注意从+到的变化*

于 2010-01-22T09:48:41.723 回答
77
/^(?!my).*/

(?!expression)是负前瞻;它匹配从该位置开始expression 匹配的位置。

于 2010-01-22T09:49:35.920 回答
47

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

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

这匹配零个或一个字符长 ( ^.?$) 的字符串,因此不能my。或者具有两个或多个字符的字符串,当第一个字符不是一个m字符时,可以跟随 ( ^[^m].+);或者如果第一个字符是 a m,则后面不能跟y( ^m[^y])。

于 2010-01-22T10:09:43.867 回答
9

进行肯定匹配并拒绝这些字符串而不是匹配否定以找到要接受的字符串,难道不是更易读吗?

/^my/
于 2011-09-12T16:34:27.500 回答