RegExp匹配字符串不以my开头

Dom*_*aja 76 regex pmd regex-negation

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

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

re.match('myVar')       == false
re.match('manager')     == true
re.match('thisIsMyVar') == true
re.match('myOtherVar')  == false
re.match('stuff')       == true
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的(稍后会在这里列出,抱歉,现在无法访问它们),但尚未使用它.

Tim*_*ker 143

^(?!my)\w+$
Run Code Online (Sandbox Code Playgroud)

应该管用.

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

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

^(?!my)[A-Za-z_]\w*$
Run Code Online (Sandbox Code Playgroud)

请注意从更改+*.


Amb*_*ber 53

/^(?!my).*/
Run Code Online (Sandbox Code Playgroud)

(?!expression)是一个负面的先行; 它匹配从该位置开始expression 匹配的位置.


Gum*_*mbo 35

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

^(.?$|[^m].+|m[^y].*)
Run Code Online (Sandbox Code Playgroud)

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


Vic*_*uno 6

做一个积极的匹配并拒绝那些字符串会不会显着更具可读性 - 而不是匹配负数来找到要接受的字符串?

/^my/
Run Code Online (Sandbox Code Playgroud)

  • 这会更容易,但是在提交到存储库时检查代码的规则需要它,因此逻辑无法"恢复". (4认同)