[英]java.util.regex.PatternSyntaxException: Unclosed character class for \d*
My regular expression: 我的正则表达式:
java.util.regex.PatternSyntaxException: Unclosed character class near index 14
[^]*?¥(\d*.\d*)
^
But I can't find any flaw in my expression and it works well on http://regexr.com/
. 但是我在表达式中找不到任何缺陷,可以在http://regexr.com/
很好地工作。
My intention for [^]
: 我对[^]
意图:
Use [^]
to match any character because .
使用[^]
来匹配任何字符,因为.
only match any character except line break. 仅匹配除换行符以外的任何字符。
Call code: 通话代码:
Pattern pattern = compile(regex);
StackTrace: 堆栈跟踪:
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)"
...
EDIT: 编辑:
[^.]*?¥(\\d*.\\d*)
works. [^.]*?¥(\\d*.\\d*)
有效。 It seems java.util.regex
doesn't support [^]
to match any character. 似乎java.util.regex
不支持[^]
匹配任何字符。
If any one is willing to write some explanation for that, I will accept it as answer. 如果有人愿意为此写些解释,我将接受它作为答案。
The problem is that you are using the wrong tool to test your regex . 问题是您使用了错误的工具来测试正则表达式 。 RegExr v2 uses JavaScript regex, while RegExr v1 uses Flex regex, both have different parsing rule compared to Java regex. RegExr v2使用JavaScript regex,而RegExr v1使用Flex regex,与Java regex相比,两者都有不同的解析规则。
While [^]
is valid in JavaScript, it is parsed as an (incomplete) negated character class in Java, which contain literal ]
(and whatever follows). 尽管[^]
在JavaScript中有效,但在Java中它被解析为一个(不完整的) 否定字符类,其中包含文字[ ]
(及其后的内容)。
Java does not accept empty character class (or negated empty character class), so the first ]
in character class (ie []
or [^]
) does not close the character class, and ]
is treated as literal character instead. Java不接受空字符类(或否定的空字符类),因此字符类中的第一个]
(即[]
或[^]
)不会关闭字符类,而]
被视为文字字符。
To make .
做.
match any character without exception, you might want to use Pattern.DOTALL
flag: 匹配任何字符都无一例外,您可能要使用Pattern.DOTALL
标志:
Pattern pattern = Pattern.compile(".*?¥(\\d*.\\d*)", Pattern.DOTALL);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.