如何使用转义字符为String.matches()正确创建正则表达式?

时间:2015-10-27 13:14:45

标签: java regex string escaping

我正在尝试检查长度为1的字符串是否为以下任意字符:"[""\""^""_",单后退{ {1}}或"`"

现在我正尝试使用以下if语句来完成此任务:

"]"

当我运行程序时,if语句出现以下错误:

  

java.util.regex.PatternSyntaxException:null(in   java.util.regex.Pattern中)

带有转义字符的正则表达式的正确语法是什么?

2 个答案:

答案 0 :(得分:2)

您的列表有四个需要特别注意的字符:

  • ^是反转字符。它不能是字符类中的第一个字符,或者它必须被转义。
  • \是转义字符。必须将其转义才能直接使用。
  • [启动一个字符类,因此必须对其进行转义。
  • ]结束了一个字符类,因此必须对其进行转义。

这是" raw"正则表达式:

[\[\]_`\\^]

由于您将正则表达式表示为Java字符串文字,因此必须为Java编译器另外转义所有反斜杠:

if (character.matches("[\\[\\]_`\\\\^]")){
    isValid = false;
}

答案 1 :(得分:0)

您需要转义[]\\ - [],以便模式编译器知道它们不是特殊的字符类分隔符和\\因为它已经被转换为一个反斜杠,因为它在字符串文字中,所以为了表示模式中的转义反斜杠,你需要有不少于四个连续的反斜杠。

因此产生的正则表达式应该是

"[\\[\\]\\\\^_`]"

(在RegexPlanet上测试 - 点击“Java”按钮进行测试)。