2016-11-16 82 views
0

在此處填寫正確的正則表達式noob,其中涉及需要修改的RegEx項目。這是一個爆炸性的學習。正則表達式匹配文字字符串集合以及值範圍

我需要搜索/驗證一組以兩個字符串組合(NC或KH)和一個變量數字列表(每個字符串前綴唯一)開始的值。 NC01-NC13或KH01-11。

我已經能夠拉斷的這第一個共同的 「塊」 與:

^(NC|KH)0[1-9]$ 

驗證NC01-NC09或KH01,KH09。接下來的部分是完全拋出我 - 需要將兩位數字符的前導字符更改爲1與a 0,並將範圍限制爲0-3(對於NC)和0-1(對於KH)。

我發現在兩個字符串之間進行選擇的參考比比皆是(我從中得到(NC | KH)),但沒有詳細說明如何根據找到的文本限制下列值。

任何和所有的幫助將不勝感激,以及RegEx的任何偉大的參考書/教程(目前使用Regular-Expressions.info)。

回答

0

堅持與NCKH您的選擇原來的想法,做同樣的號碼,試試這個:

^(NC|KH)(0[1-9]|1[0-3])$ 

希望是有道理的

編輯:

基礎的在@帕特里克的評論下面,並堅持這個原始答案,你可以使用這個(雖然我敢打賭有一個更好的辦法):

^(NC|KH)(0[1-9]|1[0-1])|(NC1[2-3])$ 
+1

但是,這匹配'KH13',它不在模式中。 –

+0

補充一下,錯過了......錯誤的答案。感謝您指出。 –

+0

更新爲它。謝謝! –

1

這樣做的最好方法是將兩個案例完全分開。

((NC(0\d|1[0-3])|(KH(0\d|1[01]))) 

您可能希望將某些內部捕獲組變成非捕獲組,但會使正則表達式難以閱讀。

編輯:你可能也能夠做到這一點積極lookbehind。 編輯:這是一個使用lookbehind的正則表達式。這很麻煩,而且在這裏並不是真的必要,但希望可以證明它的作用:

(KH|NC)(0\d|(?<=KH)(1[01])|(?<=NC)(1[0-3]))