RegEx重复组

时间:2013-07-04 07:15:48

标签: regex

我有一个字符串:

  

10-02; 34-05;

像dd-dd这样的元素可以重复多次:

  

10-02; 34-05; 12-02; 23-05; 10-42; 44-05

在字符串的末尾,符号;可以是可选的,但在元素dd-dd之间,符号;应该是必需的。

我尝试构建正则表达式/^([0-9]{2}-[0-9]{2}[;])+$/),但它涵盖了10-02;34-05;12-02;23-05;10-42;44-05但不包含10-02;34-05;12-02;23-05;10-42;44-05;的情况,最后带有符号;

如何构建正则表达式来覆盖这两种情况。

感谢。

4 个答案:

答案 0 :(得分:3)

简单^(?:\d{2}-\d{2}(?:;|$))+$

这意味着:

^               # start of line
(?:             # non-capturing group
    \d{2}       # match 2 digits
    -           # match a hyphen
    \d{2}       # match 2 digits
    (?:;|$)     # match ; or end of line
)+              # repeat 1 or more times
$               # end of line

注意

10-02;34-05;12-012;23-05;10-42;44-05;
                ^--- You have 3 digits here ??? If so change all {2} to +

Online demo

答案 1 :(得分:2)

您可以使用?来选择匹配模式

^\d{2}-\d{2}(;\d{2}-\d{2})*;?$

^(\d{2}-\d{2};)*(\d{2}-\d{2};?)$

答案 2 :(得分:2)

这可以简单/简短地表达出来:

^(\d\d-\d\d(;|$))+$

答案 3 :(得分:1)

使用类似的东西:

^(\d{2}-\d{2};)*\d{2}-\d{2}(;)?$

?运算符使最后一个父级表达式可选,就像在其后放置{0, 1}一样。