首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java正则表达式转义字符

Java正则表达式转义字符
EN

Stack Overflow用户
提问于 2017-08-25 21:14:26
回答 1查看 936关注 0票数 2

当匹配某些字符(比如换行符)时,可以使用正则表达式"\n“,或者只使用"\n”。例如,下面的代码将字符串拆分为行数组:

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

但是下面的方法同样有效:

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

我的问题是:

上面两个是以完全相同的方式工作的,还是有什么细微的区别?如果是后者,你能举一个不同结果的例子吗?

或者只在可能的/理论上的性能上存在差异?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-25 21:36:46

在当前情况下没有什么不同。通常的字符串转义序列是由一个反斜杠和一个有效的转义字符("\n""\r"等)组成的。正则表达式转义序列是在文字反斜杠(即Java string文字中的双反斜杠)和有效正则表达式转义字符("\\n""\\d"等)的帮助下形成的。

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

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

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

有关支持的正则表达式转义列表,请参阅Java regex docs中的列表。

但是,如果使用Pattern.COMMENTS flag (用于引入注释和很好地格式化模式,使正则引擎忽略模式中所有未转义的空格),则需要使用"\\n""\\\n"在Java string文本中定义换行符(LF),使用"\\r""\\\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>+newline+<LF>的?因为"(?x)\n"等于"",这是一个空模式,它匹配换行符前后的空格。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45882306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档