2

我有一个字符串:

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

4 回答 4

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 +

在线演示

于 2013-07-04T07:20:35.170 回答
2

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

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

或者

^(\d{2}-\d{2};)*(\d{2}-\d{2};?)$
于 2013-07-04T07:21:17.267 回答
2

这与您可以表达的一样简单/简短:

^(\d\d-\d\d(;|$))+$
于 2013-07-04T07:33:01.873 回答
1

使用这样的东西:

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

?运算符使最后一个带括号的表达式成为可选的,就像在它后面放置一个{0, 1}

于 2013-07-04T07:22:43.233 回答