Java 为什么`Pattern.compile(";(?:\u00e9)";,Pattern.CANON_EQ)`throw?
使用Java 为什么`Pattern.compile(";(?:\u00e9)";,Pattern.CANON_EQ)`throw?,java,unicode,Java,Unicode,使用模式编译的正则表达式没有限制。然而 Pattern.compile("(?:\u00e9)",Pattern.CANON_EQ); 引发异常: java.util.regex.PatternSyntaxException: Unmatched closing ')' near index 11 ((?:é)|é)|e)́) ^ 请注意,模式是规范化的字符串。它看起来像是JRE中的一个bug,但我在问题跟踪器中找不到这样的bug。似乎是这样的:我得到了一个稍微不同的错误,不匹
模式编译的正则表达式没有限制。然而
Pattern.compile("(?:\u00e9)",Pattern.CANON_EQ);
引发异常:
java.util.regex.PatternSyntaxException: Unmatched closing ')' near index 11
((?:é)|é)|e)́)
^
请注意,模式是规范化的字符串。它看起来像是JRE中的一个bug,但我在问题跟踪器中找不到这样的bug。似乎是这样的:我得到了一个稍微不同的错误,不匹配的结尾“')在这里靠近索引13,(?:(?:e)| e))
,倒数第二个“')。它不会抛出两个额外的开口“(”或者在\u00e9
和“')之间有一个ASCII字符。哦,孩子。这是2003年的错误!有这样的错误是可以接受的,但必须在文档中明确指出!有趣的是,这个bug在IBMJDK中是重复的