Java 正则表达式错误 - Look-behind 组没有明显的最大长度

2022-09-02 12:16:23

我收到此错误:

java.util.regex.PatternSyntaxException: Look-behind group does not have an
    obvious maximum length near index 22
([a-z])(?!.*\1)(?<!\1.+)([a-z])(?!.*\2)(?<!\2.+)(.)(\3)(.)(\5)
                      ^

我正在尝试匹配 ,但不是 .COFFEEBOBBEE

我使用的是java 1.6。


答案 1

要避免此错误,应替换为如下区域:+{0,10}

([a-z])(?!.*\1)(?<!\1.{0,10})([a-z])(?!.*\2)(?<!\2.{0,10})(.)(\3)(.)(\5)

答案 2

Java不支持后面的可变长度。
在这种情况下,您似乎可以轻松忽略它(假设您的整个输入是一个单词):

([a-z])(?!.*\1)([a-z])(?!.*\2)(.)(\3)(.)(\5)

两个外观都不添加任何内容:第一个断言至少有两个字符,而您只有一个字符,第二个检查第二个字符是否与第一个字符不同,后者已被 覆盖。(?!.*\1)

工作示例:http://regexr.com?2up96