2013-12-16 380 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} 

:指定这是一个非捕获组