2013-10-23 83 views
-2

模式例如:正則表達式表示爲車牌

L(IP)-P(F)-2(014) 

更多的例子:

B-G-2 
BI-GH-1245 
HH-X-124 

在括號中的字符是可選的。首先(最多3個字符,分鐘1)和第二部分(最多2個字符,分鐘1)僅由字母組成。第三部分(最大4.分鐘1)僅包含數字。部件按「 - 」分隔。

任何想法如何正則表達式這將看起來像?

+1

它是那些確切的字母和數字嗎?例如,第一個字母總是L,還是隻是任何大寫字母的佔位符? –

+0

沒有那種方式只是一個例子。可能是任何字母和任何數字 –

+1

只需檢查。那麼一些合法的例子是L-P-2,LAB-PD-2和LA-PD-201?或者L和P也在括號內嗎? – AlwaysLearning

回答

7

可以使用字符類[A-Z]匹配任何大寫字符,並\d匹配任何數字。您可以使用{m,n},這意味着「之間的一個元素匹配ñ次」指定重複:

它可能是這個樣子:

[A-Z]{1,3}-[A-Z]{1,2}-[0-9]{1,4} 

您可能還需要添加開始串錨和結束(^$分別地):

^[A-Z]{1,3}-[A-Z]{1,2}-[0-9]{1,4}$ 

這取決於瓦特無論你是試圖從大字符串中拉出牌照,還是試圖查看某個字符串是否爲牌照(而沒有其他字符串)。

如果您還需要匹配小寫字符,請將[A-Z]中的每個類都更改爲[A-Za-z]

+0

括號內的可選文本怎麼辦? – anubhava

+1

括號不存在,這是OP選擇代表可選字符的方式。目標是匹配1-3個字母,短劃線,1-2個字母,短劃線,然後1-4個數字。最近幾個例子的編輯支持我的解釋。 –

+0

@F。J謝謝,我在java中使用它,它給了我一個錯誤「無效的轉義序列」http://developer.android.com/reference/java/util/regex/Pattern.html –

4

你可以使用這個表達式:

^[A-Za-z]{1,3}-[A-Za-z]{1,2}-[0-9]{1,4}$ 
+0

爲什麼有趣的回參考? – Junuxx

+0

你在哪裏看到回參考? – anubhava

+0

'(?:XXX)'是'(XXX)'的非捕獲版本。 – Barmar

1

如果我正確地解釋你,你基本上需要

< 1-3字母> < 1-2字母> < 1-4數字>

或[A-ZA-Z] {1, 3} - [A-Za-z] {1,2} - [0-9] {1,4}