正则表达式:任何单词和数字组合,但有一个下划线

时间:2016-12-12 13:59:10

标签: regex

如果它包含字母或数字或单个下划线序列,我想匹配整个字符串,所以:

接受:

  • H_i_there
  • _this_is_OK _
  • _x_y_5_z
  • abddd_cdxxx

不接受:

  • 取值___ 2
  • __ s__t__2
  • __ X ____ X4

因此不允许多个连续的下划线。正则表达式如何看待这个?我的版本是:^[a-zA-Z0-9]+\_{0,1}[a-zA-Z0-9]+\_{0,1}$,但这必须是递归的,不知何故,为了它起作用,AFAIK,正则表达式不支持这种复杂的功能。

2 个答案:

答案 0 :(得分:2)

您可以使用

^_?[a-zA-Z0-9]+(?:_[a-zA-Z0-9]+)*_?$

请参阅regex demo

<强>详情:

  • ^ - 字符串开头
  • _? - 可选的_
  • [a-zA-Z0-9]+ - 1个字母数字字符
  • (?:_[a-zA-Z0-9]+)* - 0+序列:
    • _ - 1下划线
    • [a-zA-Z0-9]+ - 1个字母数字字符
  • _? - 可选的_
  • $ - 字符串结尾

效率较低但较短的模式:

^(?:_?[a-zA-Z0-9]+)*_?$

请参阅this demo

答案 1 :(得分:1)

您可以使用lookahead禁止__

^(?!.*?__)\w+$

See demo at regex101

\w匹配字符 [A-Za-z0-9_](包括下划线)。