正则表达式未正确匹配

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]",它是有效的,但不能组合使用。请建议如何匹配正则表达式。谢谢。
4个回答

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

非常感谢。它正在运行。我将在9分钟后接受答案 :) - Kumar
顺便问一下,如果我想要将数值范围限制在-1到1之间,应该怎么做呢? - Kumar
1
感谢您的回答。 - Kumar

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

这个正则表达式匹配一个字符(可以是0、1或者字母A),后面跟着一个冒号,然后是另一个和第一个一样的字符,再跟着一个冒号,最后是第三个和第一个一样的字符。

接着它使用了一个竖杠字符(注意它被转义了),后面跟着两个相同的字符序列。


2
问题在于整个字符串上的|,因此,在添加括号以指示分组将发生的情况下,您的正则表达式将类似于以下内容:
"(\\d{1,1})<b>|</b>([A]:\\d{1,1})<b>|</b>([A]:\\d{1,1})<b>|</b>([A])<b>|</b>([A]:\\d{1,1})<b>|</b>([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}"

是的,我明白了,但是我没能加上括号;感谢您的解释。 - Kumar

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接