简体   繁体   English

java.util.regex.PatternSyntaxException:\\ d *的未封闭字符类

[英]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.

相关问题 java.util.regex.PatternSyntaxException:索引0附近的未闭合字符类 - java.util.regex.PatternSyntaxException: Unclosed character class near index 0 java.util.regex.PatternSyntaxException:索引附近的未闭合字符类 - java.util.regex.PatternSyntaxException: Unclosed character class near index java.util.regex.PatternSyntaxException:索引12附近的未封闭字符类\\\\ b]([^。(| [] +) - java.util.regex.PatternSyntaxException: Unclosed character class near index 12 \\b]([^.(|[]+) java.util.regex.PatternSyntaxException:索引58附近的未封闭字符类错误 - java.util.regex.PatternSyntaxException: Unclosed character class near index 58 error java.util.regex.PatternSyntaxException:索引28附近的未封闭字符类 - java.util.regex.PatternSyntaxException: Unclosed character class near index 28 java.util.regex.PatternSyntaxException:索引44附近的未封闭字符类 - java.util.regex.PatternSyntaxException: Unclosed character class near index 44 java.util.regex.PatternSyntaxException - java.util.regex.PatternSyntaxException java.util.regex.PatternSyntaxException:悬挂元字符&#39;?&#39; - java.util.regex.PatternSyntaxException: Dangling meta character '?' java.util.regex.PatternSyntaxException:在索引 0 + 附近悬空元字符 &#39;+&#39; - java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0 + Java Regex未封闭字符类(PatternSyntaxException) - Java Regex Unclosed character class (PatternSyntaxException)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM