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

How do I properly create a regex for String.matches() with escape characters?

我正在尝试检查长度为 1 的字符串是否为以下任何字符:"[""\""^""_"、单回勾选 "`""]".

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

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

当我 运行 我的程序时,我收到以下 if 语句错误:

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

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

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

  • ^是反转字符。它不能是字符 class 中的第一个字符,否则必须转义。
  • \ 是转义字符。必须转义才能直接使用
  • [开始一个字符class,所以必须转义。
  • ]结束一个字符class,所以必须转义。

这是 "raw" 正则表达式:

[\[\]_`\^]

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

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

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

所以生成的正则表达式应该是

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

(在 RegexPlanet 上测试 - 单击 "Java" 按钮进行测试)。