如何匹配字符串仅包含使用正则表达式的字母数字字符,短划线和下划线

时间:2015-01-28 16:47:28

标签: java regex

所有

我想要做的是使用Regex匹配只允许[A-Za-z0-9_-]的字符串,格式应为:

仅以[A-Za-z0-9]开头,然后是[A-Za-z0-9_-]。中间可能有[_-],但如果有,则只允许一次(_和 - 都可以存在,但每个只有一次机会),并以[A-Za-z0-9结束] ]

我只知道如何匹配字母数字字符,破折号和下划线,但不知道如何限制它们的出现时间。

由于

1 个答案:

答案 0 :(得分:3)

您可以使用否定前瞻:

^(?!.*(-[^-]*-|_[^_]*_))[A-Za-z0-9][\w-]*[A-Za-z0-9]$

RegEx Demo

说明:

  • ^ - 直线开始
  • (?!.*(-[^-]*-|_[^_]*_)) - 如果前面有2个下划线或2个连字符,那么否定前瞻意味着匹配失败
  • [A-Za-z0-9] - 匹配1个字母数字字符
  • [\w-]* - 匹配0个[A-Za-z0-9_-]个字符
  • $ - 匹配行结束
相关问题