gpt4 book ai didi

java.util.regex.PatternSyntaxException : Unclosed character class for\d*

转载 作者:行者123 更新时间:2023-12-01 22:10:06 24 4
gpt4 key购买 nike

我的正则表达式:

java.util.regex.PatternSyntaxException: Unclosed character class near index 14
[^]*?¥(\d*.\d*)
^

但我在我的表达式中找不到任何缺陷,并且它在 http://regexr.com/ 上运行良好。

我对[^]的意图:

使用[^]匹配任意字符,因为.只匹配除换行符之外的任意字符。

调用代码:

Pattern pattern = compile(regex);

堆栈跟踪:

0 = {StackTraceElement@12872} "java.util.regex.Pattern.error(Pattern.java:1955)"
1 = {StackTraceElement@12873} "java.util.regex.Pattern.clazz(Pattern.java:2548)"
2 = {StackTraceElement@12874} "java.util.regex.Pattern.sequence(Pattern.java:2063)"
3 = {StackTraceElement@12875} "java.util.regex.Pattern.expr(Pattern.java:1996)"
4 = {StackTraceElement@12876} "java.util.regex.Pattern.compile(Pattern.java:1696)"
5 = {StackTraceElement@12877} "java.util.regex.Pattern.<init>(Pattern.java:1351)"
6 = {StackTraceElement@12878} "java.util.regex.Pattern.compile(Pattern.java:1028)"
...

编辑:

[^.]*?¥(\d*.\d*) 有效。似乎 java.util.regex 不支持 [^] 匹配任何字符。

如果有人愿意为此写一些解释,我会接受它作为答案。

最佳答案

问题是您使用了错误的工具来测试您的正则表达式。 RegExr v2 使用 JavaScript 正则表达式,而 RegExr v1 使用 Flex 正则表达式,与 Java 正则表达式相比,两者都有不同的解析规则。

虽然 [^] 在 JavaScript 中有效,但在 Java 中它被解析为(不完整的)否定字符类,其中包含文字 ](以及接下来的内容)。

Java 不接受空字符类(或否定空字符类),因此字符类中的第一个 ] (即 [][^] ) 不会关闭字符类,并且 ] 被视为文字字符。

要使 . 毫无异常(exception)地匹配任何字符,您可能需要使用 Pattern.DOTALL标志:

Pattern pattern = Pattern.compile(".*?¥(\\d*.\\d*)", Pattern.DOTALL);

关于java.util.regex.PatternSyntaxException : Unclosed character class for\d*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31955574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com