代码之家  ›  专栏  ›  技术社区  ›  Dominik Sandjaja

不以my开头的regexp匹配字符串

  •  61
  • Dominik Sandjaja  · 技术社区  · 15 年前

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

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

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

    我尝试过不同的方法(稍后将在此处列出,抱歉,目前无法访问这些方法),但还没有成功。

    4 回复  |  直到 13 年前
        1
  •  33
  •   Gumbo    15 年前

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

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

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

        2
  •  126
  •   Tim Pietzcker    15 年前
    ^(?!my)\w+$
    

    应该工作。

    它首先确保不可能匹配 my 在字符串的开头,然后匹配字母数字字符,直到字符串的结尾。字符串中的任何空白都将导致regex失败。根据您的输入,您可能希望在将字符串传递给regex之前,在字符串的前面和后面去掉空白,或者使用向类似regex添加可选的空白匹配器 ^\s*(?!my)(\w+)\s*$ . 在这种情况下,backreference 1将包含变量的名称。

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

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

    注意从 + * .

        3
  •  44
  •   Amber    15 年前
    /^(?!my).*/
    

    (?!expression) 是一个消极的前瞻;它符合一个位置 expression 从那个位置开始比赛。

        4
  •  5
  •   Victor Bruno    13 年前

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

    /^my/