正则表达式匹配的字符串不以

对于 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

我试过不同的方法,但还没有成功。

289301 次浏览
^(?!my)\w+$

应该可以。

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

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

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

注意从 +*的变化。

/^(?!my).*/

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

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

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

这与长度为零或一个字符的字符串(^.?$)匹配,因此不能是 my。或者有两个或更多字符的字符串,如果第一个字符不是 m,后面可能还有更多字符(^[^m].+) ; 或者如果第一个字符是 m,则后面不能有 y(^m[^y])。

如果做一个正匹配并拒绝这些字符串,而不是匹配负值以找到要接受的字符串,这难道不会更具可读性吗?

/^my/