我的正则表达式:
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
不支持[^]
匹配任何字符。
如果有人愿意为此写一些解释,我会接受它作为答案。
答案 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
标记:
.