RegExp匹配string不是以我的开头

对于PMD,我希望有一个规则,告诉我这些丑陋的variables,从我的开始。 这意味着我必须接受所有不以我开始的variables。

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

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

我尝试了不同的(以后会列出,抱歉,现在不能访问),但还没有正常工作。

你可以像其他人一样使用前瞻断言。 或者,如果你只是想使用基本的正则expression式语法:

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

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

 ^(?!my)\w+$ 

应该pipe用。

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

如果您需要确保您的variables名称以某组字符开头,请说[A-Za-z_] ,请使用

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

请注意从+*的更改。

 /^(?!my).*/ 

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

做一个积极的匹配和拒绝这些string,而不是匹配否定string接受?

 /^my/