我正在尝试检查长度为1的字符串是否为以下任意字符:"["
,"\"
,"^"
,"_"
,单后退{ {1}}或"`"
。
现在我正尝试使用以下if语句来完成此任务:
"]"
当我运行程序时,if语句出现以下错误:
java.util.regex.PatternSyntaxException:null(in java.util.regex.Pattern中)
带有转义字符的正则表达式的正确语法是什么?
答案 0 :(得分:2)
您的列表有四个需要特别注意的字符:
^
是反转字符。它不能是字符类中的第一个字符,或者它必须被转义。\
是转义字符。必须将其转义才能直接使用。[
启动一个字符类,因此必须对其进行转义。]
结束了一个字符类,因此必须对其进行转义。这是" raw"正则表达式:
[\[\]_`\\^]
由于您将正则表达式表示为Java字符串文字,因此必须为Java编译器另外转义所有反斜杠:
if (character.matches("[\\[\\]_`\\\\^]")){
isValid = false;
}
答案 1 :(得分:0)
您需要转义[
,]
和\\
- [
和]
,以便模式编译器知道它们不是特殊的字符类分隔符和\\
因为它已经被转换为一个反斜杠,因为它在字符串文字中,所以为了表示模式中的转义反斜杠,你需要有不少于四个连续的反斜杠。
因此产生的正则表达式应该是
"[\\[\\]\\\\^_`]"
(在RegexPlanet上测试 - 点击“Java”按钮进行测试)。