我已经得到了匹配字符的第一部分,如下所示:^[A-Za-z0-9_]{0,}$
现在我需要检查是否有任何下划线后跟另一个下划线。我怎样才能做到这一点?
解释清单:
AAA_A - 真实
A_AA_A - 真实
A__AA - 错误
答案 0 :(得分:1)
将_
移到字符类之外并使用*
量化组:
^[A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$
请参阅regex demo。由于组之后的*
,表达式仍将匹配空字符串,但+
不会让整个字符串等于1个下划线。这也意味着_
可以出现在字符串的开头(如果您需要禁止此操作,请在(?!^)
之前添加_
)。
如果字符串可以为空,或者可以等于_
,则您还可以使用^[A-Za-z0-9]*(?:_(?!_)[A-Za-z0-9]*)*$
(demo)正则表达式变体。
模式详情。
^
- 字符串开头[A-Za-z0-9]*
- 零个或多个字母数字(?:
- 开始匹配以下序列的组:
_
- 下划线[A-Za-z0-9]+
- 一个或多个字母数字)*
- 群组结束,可以发生0次或更多次$
- 字符串结束。另一种方法 - 使用否定前瞻:
^(?!.*__)[A-Za-z0-9_]*$
见this regex demo。一旦在字符串开始后的某处找到(?!.*__)
,__
将失败。要分析多线字符串,请使用DOTALL修饰符(在Ruby / Oniguruma中,/m
修饰符),如果它不可用(如在JS中),请使用[\s\S]*
而不是.*
。