java正则表达式unclosed字符类

我需要一些帮助。 我越来越:

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.(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-escaped \以便regex-escape你的第二个java-escaped \

因此,在java转义之后\\\\变为\\ ,然后将正则表达式转义为\

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

很难说你想要实现什么,但我可以在你的正则表达式中看到一些奇怪的东西:

  1. 你打开了一类字符,但从未关闭它。 相反,你使用了\\] ,这使得正常的角色。
    • 如果你想在你的角色类中加入]那么你最后需要额外的] ,比如"^[a-zA-Z\300-\3770-9\u0153\346 \u002F.'-\\]]*$"
    • 如果你想在你的角色类中包含\那么你需要使用\\\\版本,因为你需要在正则表达式引擎和Javas字符串中两次逃避它的特殊含义
  2. 你使用- with( '-\\] ),在字符类中用来指定字符范围,如azAZ 。 要逃避它的特殊含义,你需要使用\\-