正则表达式不允许双下划线

时间:2012-09-12 08:57:52

标签: regex

尝试将regex应用于不允许带双下划线的字符串

 [a-z][a-z0-9_-]+[^__]

但在很多情况下失败了,如:

ab_      doesn't matches whereas it should
ab__c_   matches whereas it shouldn't.

3 个答案:

答案 0 :(得分:6)

[^__]匹配下划线的一个字符。要 断言 您的字符串没有两个连续的下划线,您可以使用negative lookahead

^(?!.*__.*)[a-z][a-z0-9_-]+$

外观断言你的字符串有两个连续的下划线(?!.*__.*),然后如果断言没有失败则匹配你需要的字符串 - [a-z][a-z0-9_-]+

答案 1 :(得分:1)

[^]语法定义了一个 set 字符,以便它匹配此集合中不存在的字符

如果要匹配两个非下划线的字符,可以使用[^_]{2}

但是如果你真的想检查一个字符串是否有两个下划线,你最好搜索两个下划线并否定结果

例如在perl中:"ab_" !~ /__/

答案 2 :(得分:1)

在perl中它将是:

    if($a =~ /__/){
    } else{
    }

这意味着如果字符串a包含“__”做某事,如果不做其他事情。当然,有很多方法可以使这样的代码成为可能