用于检查可选数字组的正则表达式

Regex to check Optional Group of numbers

我正在尝试创建一个应该能够接受以下字符串的正则表达式

proj_asdasd_000.gz.xml
proj_asdasd.gz.xml

基本上第二个下划线是可选的,如果后面有任何值,它应该只是整数。

以下是我正在尝试的正则表达式。

^proj([a-zA-z0-9]?)+_[a-zA-z]+(_[0-9]?)+\.[a-z]+.[a-z]

有什么让它接受上述字符串的建议吗?

您可以使用

^proj[a-zA-Z0-9]*_[a-zA-Z]+(?:_[0-9]+)?\.[a-z]+\.[a-z]+$
^proj[a-zA-Z0-9]*_[a-zA-Z]+(?:_[0-9]+)?(?:\.[a-z]+){2}$

regex demo

详情

  • ^ - 字符串开头
  • proj - 文字子串
  • [a-zA-Z0-9]* - 0 个或多个字母数字字符
  • _ - 一个 _ 字符
  • [a-zA-Z]+ - 1+ 个 ASCII 字母
  • (?:_[0-9]+)? - 一个可选的下划线序列,后跟 1+ 个数字
  • \.[a-z]+\.[a-z]+ = (?:\.[a-z]+){2} - 出现两次 . 和 1+ 个小写 ASCII 字母
  • $ - 字符串结尾。

备注:

  • [A-z]
  • ([a-zA-z0-9]?)+ 匹配一个可选字符 1 次或多次,这没有什么意义。用 + 匹配一个字符 1 次或更多次,或者用 * 匹配 0 次或更多次,不需要括号
  • (_[0-9]?)+ 匹配 1 个或多个 _ 后跟一个可选数字的序列(例如,它匹配 _9___1_)。必须交换量词以匹配 _ 和 1+ 位的可选 序列