java正则表达式模式未闭合字符类

标签 java regex matcher

我需要一些帮助。我得到:

Caused by: java.util.regex.PatternSyntaxException: Unclosed character class near index 24
^[a-zA-Z└- 0-9£µ /.'-\]*$
                        ^
        at java.util.regex.Pattern.error(Pattern.java:1713)
        at java.util.regex.Pattern.clazz(Pattern.java:2254)
        at java.util.regex.Pattern.sequence(Pattern.java:1818)
        at java.util.regex.Pattern.expr(Pattern.java:1752)
        at java.util.regex.Pattern.compile(Pattern.java:1460)
        at java.util.regex.Pattern.<init>(Pattern.java:1133)
        at java.util.regex.Pattern.compile(Pattern.java:823)

这是我的代码:

String testString = value.toString();

Pattern pattern = Pattern.compile("^[a-zA-Z\300-\3770-9\u0153\346 \u002F.'-\\]*$");
Matcher m = pattern.matcher(testString);

我必须对某些内容使用 unicode 值,因为我正在使用 xhtml。

任何帮助都会很棒!

最佳答案

假设您要匹配 \- 而不是 ]:

Pattern pattern = Pattern.compile("^[a-zA-Z\300-\3770-9\u0153\346 \u002F.'\\\\-]*$");

您需要对反斜杠进行双重转义,因为 \ 也是正则表达式中的转义字符。因此 \\] 转义了 java 的反斜杠,但不是正则表达式。您需要添加另一个 java 转义 \ 以便正则表达式转义您的第二个 java 转义 \

所以 \\\\ 在 java 转义后变为 \\ 然后正则表达式转义为 \

- 移动到序列的末尾意味着它被用作字符,而不是 Pshemo 指出的范围运算符。

关于java正则表达式模式未闭合字符类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14390722/

相关文章:

regex - 正则表达式只删除特定嵌套级别的方括号中的文本?

java - 使用 import 语句重用我自己定义的类时出现错误

Javascript 不止一个 RegEx 反向引用

regex - Perl:如何在 linux 中获取模式之间的线条

java - 当我发送匹配器作为参数时,Mockito InvalidUseOfMatchersException

regex - 匹配字符串的最后一个字符失败

java - 当 Matcher.find() 运行时间过长时如何终止?

java - 在 JPanel 中调用 setEnabled(false) 的原因

java - 从数据库打印查询

java - "Content-Disposition header"中的配置 "Apache HTTP Server"