如何使用转义字符为 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" 按钮进行测试)。
我正在尝试检查长度为 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" 按钮进行测试)。