如何将正则表达式中子串的出现限制为一个?

时间:2018-05-25 06:51:15

标签: regex

我有这个正则表达式:

/\A((\{YY\})?[-_]*(\{MM\})?[-_]*(\{DD\})?[-_]*(\{N{4,8}\})|[A-Za-z])*\z/

匹配以下值:

{YY}-{MM}-{DD}-{NNNN}

有没有办法将{NN}中包含的子串数限制为1,以便以下字符串无效?

{YY}-{MM}-{DD}-{NNNN}-{NNNNNN}

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

(\{N{4,8}\})|[A-Za-z_.#-])*

最后的明星说:捕获零或更多此{NNN ... N}捕捉表达。

(\{N{4,8}\})|[A-Za-z_.#-]){,1}

{,1}表示:最大1x前一个表达式(由( )捕获)。或者当Biffen重新制作时:?{,1}的缩写。

/\A((\{YY\})?[-_]*(\{MM\})?[-_]*(\{DD\})?[-_]*(\{N{4,8}\})|[A-Za-z])?\z/

所以这应该只捕获{YY}-{MM}-{DD}-{NNNN}但不捕获 {YY}-{MM}-{DD}-{NNNN}-{NNNNNN}

答案 1 :(得分:0)

好的,我用以下正则表达式解决了我的问题:

/\A([A-Za-z_-]*(\{YY(YY)?\})?[_-]*(\{MM\})?[_-]*(\{DD\})?[_-]*\{N{4,8}\}[A-Za-z_-]*){1}\z/