2013-02-13 82 views
1

我想接受0-9,-正則表達式的幫助,連續只有一個連字符?

所以我必須:

[0-9-,]+ 

不過,我只希望有是有史以來一個-成一排,所以你不能有--。我怎樣才能做到這一點?

+0

是否要接受逗號或不?因爲你的正則表達式目前確實接受它。 – 2013-02-13 12:05:00

+0

寫逗號是一個錯誤抱歉。 – Paul 2013-02-13 12:05:30

+0

我問過了,需要一個逗號。所以我可以添加1-2,3-4等 – Paul 2013-02-13 12:12:56

回答

2

我覺得需要一個是這樣的:

^\d+(-\d+)?(,\d+(-\d+)?)*$ 

這是做什麼的:

\d+任意整數(一個或多個數字)

(-\d+)?可選部分匹配-後面緊跟着的上述圖案組合的整數

(,\d+(-\d+)?)*零個或更多出現時,的。

注:添加所需的轉義\

+0

+1我認爲這是最好的正則表達式,如果lookaheads不支持(這可能是這種情況)。 – 2013-02-13 12:24:00

+0

謝謝你,我正在嘗試這個,它看起來不錯。我只是不確定爲什麼現在什麼都不被接受。沒有意義。甚至沒有一個數字。 – Paul 2013-02-13 12:28:54

+0

例如:switch(config-if)#switchport trunk allowed vlan 9 語法錯誤:非法參數 – Paul 2013-02-13 12:29:36

2

使用lookahead assertion

(?!.*--)[0-9,-]+ 

此外,您可能需要使用anchors,以確保整個字符串匹配:

^(?!.*--)[0-9,-]+$ 
+0

這似乎在我的系統出於某種原因導致錯誤。如果我將它添加到我的代碼中,我完全不能使用該程序。 – Paul 2013-02-13 12:11:01

+0

應該允許** 3 - **嗎? – 2013-02-13 12:13:27

+0

不,你不能有--- – Paul 2013-02-13 12:14:31

0

是這樣行嗎?

^[0-9,]*-?[0-9,]*$ 

只是做了一個小測試使用grep:

kent$ echo "1-234- 
1234- 
3-24442-34 
12341234"|grep -E '^[0-9,]*-?[0-9,]*$' 
1234- 
12341234 
+0

只允許有一個短劃線,其中需要多個(不連續)。 – 2013-02-13 12:26:08

+0

@TimPietzcker,這是他想要的,不是嗎?或者我誤解了這個問題...... – Kent 2013-02-13 12:32:42