2016-03-21 31 views
0

以下是可以接受的格式,結合基於條件正則表達式中的Java

(CCC|CC|CCN)/(NNNN-NNNNNNNN) 
OR 
(CCC|CC|CCN)/NN/(NN-NNNNN) 

其中C代表字符[AZ] N代表號碼[0-9]

我設法創建2個規則表達式同時匹配的條件,

^[A-Z]{2}[A-Z|0-9]{0,1}/\d{4,8}$ 
OR 
^[A-Z]{2}[A-Z|0-9]{0,1}/\d{2}/\d{2,5}$ 

是否有可能根據條件對/(即正斜槓的數目),以將它們合併在一個單一的正則表達式?

樣品有效的例子可能是: -


MAT/1234 
XP/1234 
XW1/12345678 

XU/12/34 
KLY/12/34567 
RT1/23/45678 
+1

您是否有一些有效的例子來匹配? – 2016-03-21 16:55:59

+1

正則表達式有一個_或_符號'|'。 – khelwood

+0

@ brso05:再次閱讀問題。 C和N只是字符和數字的符號。 – 2016-03-21 17:01:42

回答

0

UPDATE要在以下兩種模式合二爲一:

^[A-Z]{2}[A-Z|0-9]{0,1}/\d{4,8}$ 
OR 
^[A-Z]{2}[A-Z|0-9]{0,1}/\d{2}/\d{2,5}$ 

你可以嘗試:

^[A-Z]{2}[A-Z|0-9]{0,1}/\d{2}(?:\d{2,6}|/\d{2,5})$ 

REGEX DEMO

+0

你在第一部分使用了'|',你的正則表達式匹配'AA |/1111'。這是不正確的。從中刪除'|'會使它正確。 – 2016-03-22 13:12:44

+0

@noob:你說得對。它匹配'AA |/1111'。但是OP不想改變原始模式。 – Quinn

+0

是的,但這不是你在字符課中說的或者說的方式。如果想知道爲什麼一個可接受的解決方案在沒有任何東西或者OR時使用'|'。字符類本身表示其中提到的任何字符。 – 2016-03-22 13:42:13

1

根據您當前的格式,我想出了這個正則表達式。

那麼還不確定OP是否在尋找格式1111-11111111或長度爲4到8的數字。因此,我將爲兩種情況提供解決方案,這些方案可能會在將來派上用場。

對於格式:(NNNN-NNNNNNNN) OR NN/(NN-NNNNN)

正則表達式:^([A-Z]{2}[A-Z0-9]?)\/((\d{4}-\d{8})|(\d{2}\/\d{2}-\d{5}))$

Regex101 Demo


對於升在4至8和2號ength至5

正則表達式:^([A-Z]{2}[A-Z0-9]?\/)(\d{4,8}|\d{2}\/\d{2,5})$

Regex101 Demo

+1

^([AZ] {2} [A-Z0-9]?\ /)(\ d {4,8} | \ d {2} \/\ d {2,5})$這個解決方案也是可行的&更簡單。非常感謝:) –

0

好吧,我稍微長一點的正則表達式:

(?im)^([a-z]{2}[\\da-z]?)/(\\d{4}\\-\\d{8}|\\d{2}/\\d{2}\\-\\d{5})$ 

看演示regex101

匹配:

AA2/2222-22222222 
AAA/2222-22222222 
AA/2222-22222222 

AA2/22/22-22222 
AA/22/22-22222 
AAB/22/22-22222 

但不

AA2A/2222-22222222A 
AAA/2222-222A22222 
AA/2222-222222223 

2A2/22/22-222222 
3AA/22/22-22222 
1AB/22/22-22222 
+0

你應該提到你正在使用'i'標誌來區分大小寫。在你的例子中可以看到,但如果像我這樣的noob直接從這裏複製它會怎麼樣? :P – 2016-03-21 17:33:33

+0

好吧....如果像你這樣的人這樣做,可能我會退出:P無論如何,我期待OP知道那裏有什麼。 – Saleem

+1

沒關係。但我的問題是,爲什麼要在這裏處理大小寫敏感問題? OP明確提到了「[A-Z]」。這將是一個混亂。儘管如此,您可以將其添加爲旁註。 – 2016-03-21 17:38:58