2017-06-13 49 views
0

我試圖表達這樣 212425762_CHECK_08182014_1_USAJava的正則表達式長

9位數字加下劃線的模式,那麼5個字母,另一下劃線,一個8位數的日期,「_1_USA」。

這是我走到這一步,

String regex = "/^([0-9]{9})_([A-Z]{5})_(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])(20\\d\\d)(_1_USA)$/" 

但它是行不通的。我猜這是「_1_USA」部分的錯誤。有任何想法嗎?

+1

'它只是無法正常工作... ...你還可以包括代碼,你正在嘗試使用這個正則表達式嗎?你的正則表達式模式有許多錯別字。另外,你爲什麼改變你原來的問題? –

+0

固定。感謝您的幫助! – DylanK

回答

2

數量[1_USA]{1}告訴Java來匹配1任何字符,下劃線,US,或A。相反,只使用一個字符串:

String input = "212425762_CHECK_08182014_1_USA"; 
String regex = "^([0-9]{9})_([A-Z]{5})_([0-9]{8})_(1_USA)$"; 
if (input.matches(regex)) { 
    System.out.println("The input matches."); 
} 

此外,您正則表達式有其他一些錯別字,如開頭和結尾的正斜槓,並錯誤地關閉字符類。與其他一些語言不同,Java不在其正則表達式中使用正斜槓(除非你的意思是字面意思)。

Demo

0

你的正則表達式有一個錯字,你Z後有一個)而不是]。試試這個:

String regex = "/^([0-9]{9})_([A-Z]{5})_([0-9]{8})_([1_USA]{1})$/" 
1

你有幾個字符類,不應該有。

這可能是你的意思。

原料:^([0-9]{9})_([A-Z]{5})_([0-9]{8})_(1_USA)$

絃樂器:"^([0-9]{9})_([A-Z]{5})_([0-9]{8})_(1_USA)$"

擴展

^
([0-9]{9})     # (1) 
_ 
([A-Z]{5})     # (2) 
_ 
([0-9]{8})     # (3) 
_ 
(1_USA)      # (4) 
$ 
1

此時應更換一個數字

enter image description here

String regex = "^([0-9]{9})_([A-Z]{5})_(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])(20\\d\\d)(_1_USA)$";