2013-12-16 297 views
3

您好我要匹配像下面正則表達式不匹配正確

{digit 0-1 or A}:{digit 0-1 or A}:{digit 0-1 or A}|{digit 0-1 or A}:{digit 0-1 or A}:{digit 0-1 or A}|{digit 0-1 or A}:{digit 0-1 or A}:{digit 0-1 or A} 

我使用下面的代碼的模式 -

String accMatrixPattern = "\\d{1,1}|[A]:\\d{1,1}|[A]:\\d{1,1}|[A]|[A]:\\d{1,1}|[A]"; 
String accMatrx = "1:A:1|0:1:1|0:1:1"; 

如果我只用「\\d{1,1}|[A]」; 它正在工作,但沒有合併。

請建議如何匹配正則表達式

感謝

回答

7

如果你想在每個位置只0,1或一場比賽,你可以使用:

String accMatrixPattern = "[01A]:[01A]:[01A]\\|[01A]:[01A]:[01A]\\|[01A]:[01A]:[01A]"; 

如果要取值,-1,0,1,A:

String accMatrixPattern = "([01A]|-1):([01A]|-1):([01A]|-1)\\|([01A]|-1):([01A]|-1):([01A]|-1)\\|([01A]|-1):([01A]|-1):([01A]|-1)"; 
+0

感謝ü非常。這是工作。我會在9分鐘後接受答案:) – Kumar

+0

@順便說一句,如果我想取-1到1的範圍,那怎麼做? – Kumar

+1

看我的編輯。看起來有點長,但工作。 – Szymon

2
String regex = "[01A]:[01A]:[01A](\\|[01A]:[01A]:[01A]){2}"; 

它匹配一個字符(0或1或字母A),後跟一個冒號,後跟另一個字符,如第一個,後跟一個冒號,後跟第三個字符,如第一個。

然後它需要一個|字符(注意它被轉義),接下來是同樣的事情,但是兩次。

2

的問題是,對整個字符串|,因此,與加方括號來表示分組將如何發生的,你的正則表達式將是這個樣子:

"(\\d{1,1})|([A]:\\d{1,1})|([A]:\\d{1,1})|([A])|([A]:\\d{1,1})|([A])"

因此,這將匹配的字符串組成的只有1A:0A:1或...

因此,您應該添加一些括號以使其正確處理它。

{1,1}是多餘的,您可以使用\\d

A不必在[]之內。

如果您正在談論文字字符,您需要跳過|

"(\\d|A):(\\d|A):(\\d|A)\|(\\d|A):(\\d|A):(\\d|A)\|(\\d|A):(\\d|A):(\\d|A)" 

您現在可以使用一些{}來取消冗餘。

"(\\d|A):(\\d|A)(:(\\d|A)\|(\\d|A):(\\d|A)){2}" 

僅適用於數字0-1,使用[01A](如在其他答案建議)可能是更好的。

"[01A]:[01A](:[01A]\|[01A]:[01A]){2}" 
+0

是的,我得到的,但沒有能夠把括號;謝謝你的解釋。 – Kumar

0
[01A]:[01A]:[01A](?:\\|[01A]:[01A]:[01A]){2} 

:指定這是一個非捕獲組