4

正则表达式应匹配所有长度在 2 到 3 个字符之间且仅包含 A 和 B ([AB]{2,3}) 的字符串。但它也应该只匹配最多包含一个 B 的字符串。

允许的字符串:

啊啊
啊啊
啊啊
啊啊
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
啊啊
啊啊。

不允许:

ABB <-- 两个 B

是否可以使用单个正则表达式来实现这一目标?我尝试过这样的事情:

([AB]{2,3})(?<=([B]*A[B]*){2})

但它不适用于 Java,因为它不支持 Look-behind 组的可变长度。

线程“主”java.util.regex.PatternSyntaxException 中的异常:后视组在索引 28 附近没有明显的最大长度 ([AB]{2,3})(?<=([B]*A[B ]*){2})

有什么建议么?

4

3 回答 3

4

您可以使用负前瞻来确保字符串没有两个Bs。

^(?!.*B.*B)[AB]{2,3}$

看见

于 2012-06-01T11:37:22.563 回答
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
于 2012-06-01T11:39:59.657 回答
0

尝试这个

\b(?:A{1,2}B|BA{1,2}|A{2,3}|ABA?)\b
于 2012-06-01T11:40:32.740 回答