目前的情况没有什么区别。通常的字符串转义序列是在单个反斜杠和有效转义字符的帮助下形成的("\n"
, "\r"
等)和正则表达式转义序列是在一个的帮助下形成的literal反斜杠(即 Java 字符串文字中的双反斜杠)和有效的正则表达式转义字符 ("\\n"
, "\\d"
, etc.).
"\n"
(an 转义序列) 是文字 LF(换行符)并且"\\n"
是与 LF 符号匹配的正则表达式转义序列。
"\r"
(an 转义序列) 是字面 CR(回车符)并且"\\r"
是与 CR 符号匹配的正则表达式转义序列。
"\t"
(an 转义序列) 是一个文字制表符并且"\\t"
是与制表符匹配的正则表达式转义序列。
请参阅列表中的Java 正则表达式文档对于支持的列表regex逃脱。
但是,如果您使用Pattern.COMMENTS flag(用于引入注释并很好地格式化模式,使正则表达式引擎忽略模式中所有未转义的空格),您将需要使用"\\n"
or "\\\n"
在 Java 字符串文字中定义换行符 (LF) 并"\\r"
or "\\\r"
定义回车符 (CR)。
See a Java测试:
String s = "\n";
System.out.println(s.replaceAll("\n", "LF")); // => LF
System.out.println(s.replaceAll("\\n", "LF")); // => LF
System.out.println(s.replaceAll("(?x)\\n", "LF")); // => LF
System.out.println(s.replaceAll("(?x)\\\n", "LF")); // => LF
System.out.println(s.replaceAll("(?x)\n", "<LF>"));
// => <LF>
//<LF>
为什么最后一个产生<LF>
+换行符+<LF>
?因为"(?x)\n"
等于""
,一个空模式,它匹配换行符之前和之后的空格。