Java 模式中的冗余转义字符
我正在尝试以下代码,它打印错误。 我希望这是真的。 此外,Pattern.Compile()statemenet提供了一个警告“冗余转义字符”。 有人能帮我解释为什么这不是真的,为什么我会看到警告Java 模式中的冗余转义字符,java,regex,Java,Regex,我正在尝试以下代码,它打印错误。 我希望这是真的。 此外,Pattern.Compile()statemenet提供了一个警告“冗余转义字符”。 有人能帮我解释为什么这不是真的,为什么我会看到警告 public static void main(String[] args) { String s = "\\n"; System.out.println(s); Pattern p = Pattern.compile("\\\n"); Matcher mm = p.
public static void main(String[] args) {
String s = "\\n";
System.out.println(s);
Pattern p = Pattern.compile("\\\n");
Matcher mm = p.matcher(s);
System.out.println(mm.matches());
}
s=“\\n”
表示为变量s
分配反斜杠和n
,它包含两个字符的序列,\
和n
Pattern.compile(\\\n”)
表示定义与换行符匹配的正则表达式模式\n
。因此,此模式与变量s
中的字符串不匹配
冗余转义警告与您在C字符串文本中使用三个反斜杠有关:两个反斜杠定义了一个文本反斜杠,第三个是冗余的,即有一个文本
\
,然后是一个换行转义序列“\n”
,这意味着文本反斜杠(用两个反斜杠定义)是多余的,可以删除。您的源s有两个字符,\'\'
和'n'
,如果您的意思是\
后跟一个换行符,那么它应该是“\\\n”
模式有两个字符“\”和“\n”(换行符),不需要转义符,因此会发出警告。如果您的意思是\后跟换行符,则它应该是“”(两次\对regex进行转义,然后\n)
因为
“\\n”
计算为反斜杠\\\
和字母n
,而“\\\n”
计算为反斜杠\\
,然后,Java源代码中字符串文本内的换行\n反斜杠将按照Java代码的要求进行解释™ 作为Unicode转义(第3.3节)或其他字符转义(第3.10.6节)的语言规范,因此有必要在表示正则表达式的字符串文本中使用双反斜杠,以防止它们被Java字节码编译器解释。字符串文本“\b”例如,当解释为正则表达式时,匹配单个退格字符,而“\\b
”匹配单词边界
请参阅:\\n表示\和n个字符。模式中的\\\n也应表示:\\n,这意味着它应匹配\和n。要匹配带有反斜杠的字符串,然后是n
,您需要string pattern=“\\\\n”
。要匹配反斜杠,字符串文本中需要4个反斜杠,表示传递给正则表达式引擎的字符串中的2个反斜杠。因此,请让我知道这是否回答了您的问题。如果没有回答,请共享您的代码或解释实际情况。\\n!=\\\n-您正在将字母“n”与换行符“\n”进行比较
String s = "\\\n";
System.out.println(s);
Pattern p = Pattern.compile("\\\\\n");
Matcher mm = p.matcher(s);
System.out.println(mm.matches());