当我尝试执行以下代码时
text.matches("[a-zA-Z0-9 !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~]");
我正在异常
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 43
[a-zA-Z0-9 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]
^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.clazz(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.matches(Unknown Source)
at java.lang.String.matches(Unknown Source)
at test.G3Utils.checkIsAttribANS(G3Utils.java:47)
at test.G3Utils.main(G3Utils.java:6)
请帮我解决这个问题
答案 0 :(得分:2)
您需要转义[
字符,就像逃离]
字符一样。
所以你的正则表达式的固定版本是:
[a-zA-Z0-9 !\"#$%&'()*+,-./:;<=>?@\\[\\]^_`{|}~]
答案 1 :(得分:1)
在正则表达式的列表中使用文字]
时,您应该将其作为第一个字符,否则Parser将无法理解它。但是,Java也接受转义它,请参阅下一段。
对于Java,您需要使用[
转义\
,但是您需要在Java中将其转义为将其用作文字字符串,因此请将[
替换为\\[
}
这将使你的正则表达式工作:
text.matches("[]a-zA-Z0-9 !\"#$%&'()*+,-./:;<=>?@\\[^_`{|}~]");
其他事项请注意,,-.
匹配从逗号到点的间隔,如果不是所需的行为,则将-
移动到最后一个位置。 (它的工作原理是因为ASCII表顺序是,
,-
和.
)。
答案 2 :(得分:0)
您可以像这样改进正则表达式:
"[\\w !\"#$%&'()*+,-./:;<=>?@\\[\\]^_`{|}~]"
在这里,您可以利用预定义的角色类\w
\w
相当于[a-zA-Z0-9]
。