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

3
我正在尝试创建一个正则表达式,它应该能够接受以下字符串: proj_asdasd_000.gz.xml proj_asdasd.gz.xml
基本上第二个下划线是可选的,如果后面跟着任何值,它应该只是整数。
以下是我尝试的正则表达式:
^proj([a-zA-z0-9]?)+_[a-zA-z]+(_[0-9]?)+\.[a-z]+.[a-z]

有什么建议可以使其接受上述提到的字符串?

1
尝试将(_[0-9]?)+替换为(_[0-9]+)?。现在的方式匹配了_1_2_3_4 - dvo
1个回答

2
你可以使用。
^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}$

查看正则表达式演示细节
  • ^ - 字符串开始
  • proj - 一个字面子字符串
  • [a-zA-Z0-9]* - 零个或多个字母数字字符
  • _ - 一个_字符
  • [a-zA-Z]+ - 一个或多个ASCII字母
  • (?:_[0-9]+)? - 一个可选序列,下划线后跟1个或多个数字
  • \.[a-z]+\.[a-z]+ = (?:\.[a-z]+){2} - 两个出现的.和一个或多个小写ASCII字母
  • $ - 字符串结束。
注:
  • [A-z] 匹配不止 ASCII 字母。
  • ([a-zA-z0-9]?)+ 匹配可选字符 1 次或更多次,这没有什么意义。要么使用 + 匹配一个字符 1 次或更多次,要么使用 * 匹配 0 次或更多次,不需要括号。
  • (_[0-9]?)+ 匹配 1 个或更多个由单个下划线后跟一个可选数字的序列(因此它匹配例如 _9___1_)。量词必须交换以匹配一个可选的序列,其中包含一个或多个下划线和数字。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接