正则表达式应匹配所有字符串,长度在2到3个字符之间,并且只包含A和B([AB] {2,3})。但它也应该只匹配字符串,其中包含最多一个B。
允许的字符串:
AA
AB
BA
AAA
AAB
ABA
BAA
不允许:
ABB< - 两个B的
单个正则表达式是否可以实现这一目标?我尝试过类似的东西:
([AB] {2,3})(小于?=([B] * A [B] *){2})
但它不适用于Java,因为它不支持Look-behind组的可变长度。
线程“main”中的异常java.util.regex.PatternSyntaxException:Look-behind组在索引28附近没有明显的最大长度 ([AB] {2,3})(小于?=([B] * A [B] *){2})
有什么建议吗?
答案 0 :(得分:4)
答案 1 :(得分:2)
嗯,您可以单独列出选项:
^(A{2,3}|A{1,2}B|ABA|BA{1,2})$
↑ ↑ ↑ ↑
│ │ │ └─ starting with B
│ │ └───── B in the middle
│ └───────────── B at the end
└──────────────────── only A
答案 2 :(得分:0)
试试这个
\b(?:A{1,2}B|BA{1,2}|A{2,3}|ABA?)\b