嗨,我必须匹配下面的模式
{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]
”;
它工作但没有合并。
请建议如何匹配正则表达式
由于
答案 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])"
因此它会匹配仅包含1
或A:0
或A: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}
?:指定这是一个非捕获组