我需要一些帮助。我得到了:
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。
任何帮助都会很棒!
答案 0 :(得分:12)
假设您要匹配\
和-
而不是]
:
Pattern pattern = Pattern.compile("^[a-zA-Z\300-\3770-9\u0153\346 \u002F.'\\\\-]*$");
你需要双重转义反斜杠,因为\
也是正则表达式中的转义字符。因此\\]
逃避了java的反斜杠而不是正则表达式。您需要添加另一个java-escaped \
,以便regex-escape您的第二个java-escaped \
。
java转义后\\\\
变为\\
,然后正则表达式转义为\
。
将-
移动到序列的末尾意味着将其用作字符,而不是Pshemo指出的范围运算符。
答案 1 :(得分:2)
很难说你想要达到什么目标,但我可以在你的正则表达式中看到一些奇怪的东西:
\\]
使]
正常字符。
]
,那么最后需要额外的]
,例如"^[a-zA-Z\300-\3770-9\u0153\346 \u002F.'-\\]]*$"
\
那么你需要使用\\\\
版本,因为你需要在regex引擎和Javas String中两次逃避它的特殊含义-
与'-\\]
一起用于字符类,用于指定a-z
或A-Z
等字符范围。要逃避其特殊含义,您需要使用\\-