java.util.regex.PatternSyntaxException:\ d *

时间:2015-08-12 03:34:22

标签: java regex

我的正则表达式:

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不支持[^]匹配任何字符。

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

1 个答案:

答案 0 :(得分:3)

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

虽然jQuery(".dropDown").change(function () { jQuery(this).closest('.group').find(".drop-down-show-hide").hide(); //find select's parent and hide its corresponding divs only jQuery("#" + this.value).show(); }); 在JavaScript中有效,但它在Java中被解析为(不完整的)否定的字符类,其中包含文字[^](以及后面的内容)。< / p>

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

要使]毫无例外地匹配任何字符,您可能需要使用Pattern.DOTALL标记:

.