java - 如何正确为带有转义字符的 String.matches() 创建正则表达式?

标签 java regex string escaping

我正在尝试检查长度为 1 的字符串是否为以下字符之一:"[""\""^""_"、单反引号 "`""]"

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

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

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

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

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

最佳答案

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

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

这是“原始”正则表达式:

[\[\]_`\\^]

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

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

关于java - 如何正确为带有转义字符的 String.matches() 创建正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33369017/

相关文章:

java - 如何在java中使用随机数组和计时器?

java - 检查文本是否不是问题类型并且还包含一些特定单词

c++ - 使用 strlen 时不为空终止符添加 +1 会导致在使用 send 时发送额外的垃圾字节

java - GWT SuggestBox : Rich suggestions instead of just text?

java - 找不到根项目参数的方法 sourceCompatibility()

Java 泛型 : Type Inference Performance

正则表达式。如何匹配单词后面和前面没有其他字符

javascript - 当使用正则表达式限制为 24 个字符时,ng-pattern 不起作用

c++ - C++ 中没有的头函数

string - Bash:从字符串中提取(百分比)可变长度数