首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >匹配线段- \n还是\r\n?

匹配线段- \n还是\r\n?
EN

Stack Overflow用户
提问于 2013-11-18 19:40:01
回答 7查看 571.3K关注 0票数 279

在编写这个答案时,我必须只在换行符上匹配,而不是使用s-flag (dotall -点匹配换行符)。

当尝试在\n\r\n上匹配时,通常用于测试正则表达式的站点的行为有所不同。

我注意到

  • Regex101只在\n上匹配换行符 (示例 -删除\r并与之匹配)
  • RegExr在\n\r\n上都不匹配换行 除了m-flag和\s之外,我找不到什么东西来匹配它。 (示例)
  • Debuggex的行为更加不同: 在这个例子中,它仅在\r\n上匹配,而 这里它只匹配在\n上,使用相同的标志和指定的引擎

我完全了解m-flag (多行-使^与开始匹配,$匹配行尾),但有时这不是一种选择。\s也是如此,因为它也匹配制表符和空格。

我使用unicode换行符(\u0085)的想法没有成功,所以:

  1. 是否有一种故障安全的方法可以将行间隔上的匹配(最好不管使用何种语言)集成到正则表达式中?
  2. 为什么上面提到的站点行为不同(特别是Debuggex,只在\n上匹配一次,在\r\n上只匹配一次)?
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-11-18 19:56:57

我会朝相反的方向回答。

  1. 关于\r\n的完整解释,我必须参考这个问题,这个问题比我在这里发布的内容要完整得多:\n和\r之间的区别?

长话短说,Linux将\n用于新的一行,即Windows \r\n和旧Mac \r。因此,有多种方法可以编写换行符。例如,您的第二个工具(RegExr)在单个\r上匹配。

  1. 正如伊利亚所建议的那样,[\r\n]+将有效,但也将匹配多个连续的新行。(\r\n|\r|\n)更正确。
票数 360
EN

Stack Overflow用户

发布于 2018-04-12 08:21:06

在PCRE中,\R\n\r\r\n匹配。

票数 31
EN

Stack Overflow用户

发布于 2013-11-18 20:53:54

在Debuggex中的示例文本中有不同的行尾。特别有趣的是,Debuggex似乎已经确定了您首先使用的行结束样式,并将输入的所有附加行尾转换为该样式。

我使用Notepad++将Unix和Windows格式的示例文本粘贴到Debuggex中,而先粘贴的就是Debuggex的会话。

因此,在将文本粘贴到Debuggex之前,您应该通过文本编辑器清洗文本。确保你在粘贴你想要的风格。Debuggex默认为Unix样式(\n)。

而且,NEL (\u 0085)是完全不同的:https://en.wikipedia.org/wiki/Newline#Unicode

(\r?\n)将覆盖Unix和Windows。如果你也想和老Mac相匹配的话,你需要一些更复杂的东西,比如(\r\n|\r|\n)

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

https://stackoverflow.com/questions/20056306

复制
相关文章

相似问题

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