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指出的范围操作符。
很难说你想要实现什么,但我可以在你的正则表达式中看到一些奇怪的东西:
- 你打开了一类字符,但从未关闭它。 相反,你使用了
\\]
,这使得正常的角色。- 如果你想在你的角色类中加入
]
那么你最后需要额外的]
,比如"^[a-zA-Z\300-\3770-9\u0153\346 \u002F.'-\\]]*$"
- 如果你想在你的角色类中包含
\
那么你需要使用\\\\
版本,因为你需要在正则表达式引擎和Javas字符串中两次逃避它的特殊含义
- 如果你想在你的角色类中加入
- 你使用
-
with('-\\]
),在字符类中用来指定字符范围,如az
或AZ
。 要逃避它的特殊含义,你需要使用\\-