java - 正则表达式:匹配具有重复字符的排列,其中一个字符不能出现多次

标签 java regex permutation restriction

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

允许的字符串:

AA
AB
BA
AAA
AAB
ABA
BAA

不允许:

ABB <-- two B's

是否可以使用单个正则表达式实现此目的?我试过类似的东西:

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

但它在 Java 中不起作用,因为它不支持 Look-behind 组的可变长度。

Exception in thread "main" java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum length near index 28 ([AB]{2,3})(?<=([B]*A[B]*){2})

有什么建议吗?

最佳答案

您可以使用否定前瞻来确保字符串没有两个 B

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

See it

关于java - 正则表达式:匹配具有重复字符的排列,其中一个字符不能出现多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10849477/

相关文章:

algorithm - 制作用于查找所有可能排列的算法

java - log4j V2 中 log4j.properties 的内容并格式化记录器输出(例如添加时间戳)

java - 递归方法有异常、逻辑错误

java - 为什么使用 "volatile"在这里没有显示任何差异?

regex - 如何在logstash中使用mutate和gsub替换部分值

java - 如何将文本文件中的字符串分成不同的数组(java)

java - 在 Java 小程序运行失败时执行 JavaScript

regex - 仅当具有给定名称的 Docker 容器不存在时,如何执行 Bash 命令?

java - 打印所有可能的长度为 k 的字符串,这些字符串由 n 个字符的集合组成,没有重复结构

java - 重复排列