我需要一些帮助。我得到:
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/