2013-07-04 61 views
1

我有一個字符串:正則表達式重複組

10-02; 34-05;

元素,如DD-DD可以重複多次:

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

在字符串末尾,符號;可以是可選的,但在元素dd-dd之間,符號;應該是強制性的。

我試過ti構建正則表達式/^([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;的情況,末尾帶有符號;

如何構建正則表達式來涵蓋兩種情況。

謝謝。

+0

一些你輸入'12-012'是不是'\ d \ D-\ d \ D'。它是'\ d {2} - \ d {2,3}' – anubhava

+0

謝謝,但它是錯字。 –

回答

2

簡單^(?:\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

+0

其實我相信這個正則表達式不允許以';'結尾的行,因爲你強制行尾排除了分號的選項。 – cgledezma

+0

@cgledezma有一個在線演示,試試吧:) – HamZa

2

您可以使用?可選地匹配PATT ERN

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

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

使用這樣的事情:

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

?運營商將進行最後parenthized表達式可選,例如撥打{0, 1}後。

2

這大約是簡單/簡單,你可以表達出來:

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

其實這個正則表達式會在裏面返回一個匹配,例如,這個字符串:'10-02; 34-05; 12-12; 23-05; 10- 42; 44-05; lzqejbg',這將是不正確的。爲了實際工作,您需要在模式之後請求行結束,就像接受的答案一樣。 – cgledezma

+0

@cgledezma a)'這取決於什麼語言。例如,Java的'String.matches()'必須匹配*整個*輸入進行匹配(開始和結束是隱含的而不是必須的),並且由於沒有指定語言,所以可能不需要結束b)如果需要結束,也必須開始啓動。答案已更新。 – Bohemian