Java 尽管有最大长度,但没有最大长度的lookbehind引发模式语法异常
我知道Java中的lookbehinds不能使用*和+重复。我使用大括号定义了模式重复的最大长度,但它仍然引发以下异常:Java 尽管有最大长度,但没有最大长度的lookbehind引发模式语法异常,java,regex,Java,Regex,我知道Java中的lookbehinds不能使用*和+重复。我使用大括号定义了模式重复的最大长度,但它仍然引发以下异常: Exception in thread "main" java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum length near index 33 (?<!([A-Z]{0,100}\W{0,100}){0,100})[A-
Exception in thread "main" java.util.regex.PatternSyntaxException:
Look-behind group does not have an obvious maximum length near index 33
(?<!([A-Z]{0,100}\W{0,100}){0,100})[A-Z]{2,}(?!([A-Z]+\W+)+)
线程“main”java.util.regex.PatternSyntaxException中的异常:
在指数33附近,后看组并没有明显的最大长度
(?您仍然在lookback中使用可变长度匹配,因此它是无效的。正如您所写的,
[a-Z]{0100}
将匹配0到100个字符,这实际上与使用[a-Z]相同*
,具有匹配字符的上限。如消息所述,这不够明显。但错误表明,查找后面组没有明显的最大长度
,我们知道它不会超过(100+100)*100
所以现在应该知道最大长度了。@willOEM我在这个问题上与Pshemo合作。正则表达式引擎应该能够根据我对模式的定义计算最大长度,这就是为什么我感到困惑的原因。我读到“[使用java]您可以使用问号和大括号来指定最大参数”从*
和+
的实现方式仍然与花括号中的方式相同。请看下面的答案:谢谢!我明白你现在说的了。