gpt4 book ai didi

Java 正则表达式转义字符

转载 作者:行者123 更新时间:2023-12-05 04:09:30 25 4
gpt4 key购买 nike

匹配某些字符(例如换行符)时,您可以使用正则表达式“\\n”或仅使用“\n”。例如,以下将字符串拆分为行数组:

String[] lines = allContent.split("\\r?\\n");

但以下内容同样有效:

String[] lines = allContent.split("\r?\n");

我的问题:

以上两者在完全中的工作方式是一样的,还是有什么细微的差别?如果是后者,你能举一个你得到不同结果的例子吗?

还是仅在[可能的/理论上的] 性能上存在差异?

最佳答案

当前场景没有区别。通常的字符串转义序列是在单个反斜杠的帮助下形成的,然后是有效的转义字符("\n""\r" 等)和正则表达式转义序列是在文字 反斜杠(即 Java 字符串文字中的双反斜杠)和有效的正则表达式转义字符( "\\n""\\d" 等)。

"\n" (转义序列)是文字 LF(换行符)和 "\\n"是匹配 LF 符号的正则表达式转义序列。

"\r" (转义序列)是文字 CR(回车)和 "\\r"是匹配 CR 符号的正则表达式转义序列。

"\t" (转义序列)是一个文字制表符,"\\t"是匹配制表符的正则表达式转义序列。

请参阅 Java regex docs 中的列表获取受支持的 regex 转义列表。

但是,如果您使用 Pattern.COMMENTS flag (用于引入注释并很好地格式化模式,使正则表达式引擎忽略模式中所有未转义的空格),您将需要使用 "\\n""\\\n"在 Java 字符串文字和 "\\r" 中定义换行符 (LF)或 "\\\r"定义回车 (CR)。

查看 Java test :

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"等于"" , 一个空模式,它匹配换行符前后的空格。

关于Java 正则表达式转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45882306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com