2012-05-03 107 views
17

請協助正確的RegEx匹配。任何2個字母,然後是6個整數的任意組合。RegEx樣式任意兩個字母后跟六個數字

These would be valid: 
RJ123456 
PY654321 
DD321234 

These would not 
DDD12345 
12DDD123 
+0

那麼「ABC1234567」呢?它可能會發生? – Phrogz

+0

不會有超過兩個字母或6個數字的情況。 – Fergus

+3

「整數」是否總是西方阿拉伯數字「0-9」,或者是否會有[其他數字](http://en.wikipedia.org/wiki/Numerical_digit#Numerals_in_most_popular_systems)? – Phrogz

回答

55

[a-zA-Z]{2}\d{6}

[a-zA-Z]{2}意味着兩個字母 \d{6}意味着6位

如果你想只大寫字母,則:

[A-Z]{2}\d{6}

+0

效果很好.... – Fergus

+0

你忘記了以^開頭,否則,如果你有兩個以上的字母,它會部分匹配。 –

16

你可以嘗試這樣的事:

[a-zA-Z]{2}[0-9]{6} 

這裏是表達的向下突破:

[a-zA-Z] # Match a single character present in the list below 
       # A character in the range between 「a」 and 「z」 
       # A character in the range between 「A」 and 「Z」 
    {2}   # Exactly 2 times 
[0-9]  # Match a single character in the range between 「0」 and 「9」 
    {6}   # Exactly 6 times 

這將在受試者之間是否匹配。如果您需要圍繞主題的邊界,那麼您可以執行以下任一操作:

^[a-zA-Z]{2}[0-9]{6}$ 

確保整個主題匹配。即主題前後沒有任何內容。

\b[a-zA-Z]{2}[0-9]{6}\b 

這確保有所述對象的每一側上的word boundary

正如@Phrogz所指出的那樣,您可以通過將[0-9]替換爲\d(與其他答案中的一樣)來使表達更爲簡潔。

[a-zA-Z]{2}\d{6} 
+0

@Phrogz哈哈,它是我的首選問題,我通常使用'\ d',但我不知道今天我感覺有點不同。我會加倍努力併爲您更新。 – Robbie

+0

+1爲了徹底和迂腐;) – Phrogz

+0

這真的有幫助。正則表達式的工作..謝謝 – Fergus

5

我要看什麼是正則表達式你使用的語言,但非正式的,這將是:

[:alpha:][:alpha:][:digit:][:digit:][:digit:][:digit:][:digit:][:digit:] 

其中[:alpha:] = [a-zA-Z][:digit:] = [0-9]

如果使用正則表達式語言,使有限的重複,這將是這樣的:

[:alpha:]{2}[:digit:]{6} 

正確的語法取決於你的特定語言使用,但這是主意。

+0

[[:alpha:]]而不是[:alpha:]找到2alpha和6位[[:alpha:]] {2} [[:digit:]] {6} –

2

取決於如果您正則表達式的味道支持的話,我可能會使用:你需要在這裏

\b[A-Z]{2}\d{6}\b # Ensure there are "word boundaries" on either side, or 

(?<![A-Z])[A-Z]{2}\d{6}(?!\d) # Ensure there isn't a uppercase letter before 
           # and that there is not a digit after 
2

一切都可以在this quickstart guide找到。 一個簡單的解決方案將是[A-Za-z][A-Za-z]\d\d\d\d\d\d[A-Za-z]{2}\d{6}

如果您只想接受大寫字母,請將[A-Za-z]替換爲[A-Z]

相關問題