8

尝试应用正则表达式以不允许带有双下划线的字符串

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

但它在许多情况下都失败了,例如:

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

3 回答 3

8

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

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

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

于 2012-09-12T09:04:12.247 回答
1

[^]语法定义了一组字符,以便匹配该组中不存在的字符

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

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

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

于 2012-09-12T09:04:01.007 回答
1

在 perl 中它将是:

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

这意味着如果字符串 a 包含 "__" 做某事,如果不做其他事情。当然有很多方法可以美化这样的代码

于 2012-09-12T10:47:48.350 回答