正则表达式无法正确匹配

时间:2013-12-16 05:26:26

标签: java regex

嗨,我必须匹配下面的模式

{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]”; 它工作但没有合并。

请建议如何匹配正则表达式

由于

4 个答案:

答案 0 :(得分:7)

如果您尝试在每个位置仅匹配0,1或A,则可以使用:

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)";

答案 1 :(得分:2)

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

匹配一个字符(0或1或字母A),后跟冒号,后跟另一个字符,如第一个字符,后跟冒号,后跟第三个字符,如第一个字符。

然后需要一个|字符(请注意它已被转义),然后再次使用相同的内容,但两次。

答案 2 :(得分: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}"

答案 3 :(得分:0)

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

?:指定这是一个非捕获组