尝试将regex应用于不允许带双下划线的字符串
[a-z][a-z0-9_-]+[^__]
但在很多情况下失败了,如:
ab_ doesn't matches whereas it should
ab__c_ matches whereas it shouldn't.
答案 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包含“__”做某事,如果不做其他事情。当然,有很多方法可以使这样的代码成为可能