模式中的冗余转义字符
我正在尝试以下代码,它打印错误。 我原以为这会打印出来。 另外,Pattern.Compile()statemenet给出了一个警告’冗余转义字符’。 有人可以帮助我,为什么这不会返回真实,为什么我会看到警告。
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")
表示您定义与换行符char匹配的正则表达式模式。 因此,此模式将与变量s
中的字符串不匹配。
冗余转义警告与您在C字符串文字中使用三反斜杠的事实有关:两个反斜杠定义一个文字反斜杠,第三个是冗余的,即有一个文字\
然后一个换行转义序列"\n"
,这意味着文字反斜杠(在文字中用2个反斜杠定义)是多余的,可以删除。
因为"\\n"
表示反斜杠\\
和字母n
而"\\\n"
计算为反斜杠\\
然后换行符\n
。
你的源码有两个字符, '\'
和'n'
,如果你的意思是它后面跟一个换行符那么它应该是"\\\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());
Java源代码中字符串文字中的反斜杠被解释为Java™语言规范要求的Unicode转义(第3.3节)或其他字符转义(第3.10.6节)因此,必须在表示正则表达式的字符串文字中加倍反斜杠保护它们免受Java字节码编译器的解释。 例如,字符串文字“\ b”在解释为正则表达式时匹配单个退格字符,而“ \\b
”匹配单词边界。
参考: https : //docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html