小编典典

匹配换行符 - \n 或 \r\n?

all

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

通常用于测试正则表达式的站点在尝试匹配\n或时表现不同\r\n

我注意到

  • Regex101 仅匹配换行符\n
    例如- 删除\r并匹配)

  • RegExr 既不匹配\n 也不 匹配换行符,除了-flag 和 (示例)外,\r\n
    我找不到使其匹配换行符的东西m``\s

  • Debuggex 的行为更加不同:
    这个例子中它只匹配 on \r\n,而
    这里它只匹配 on \n,并且指定了相同的标志和引擎

我完全了解m-flag (多行 -^匹配$一行的开头和结尾),但有时这不是一个选项。与 相同\s,因为它也匹配制表符和空格。

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

  1. 是否有一种故障安全方法可以将换行符上的匹配项(最好不管使用哪种语言)集成到正则表达式中?
  2. 为什么上述站点的行为不同(尤其是 Debuggex,仅匹配一次 on\n和一次仅 on \r\n)?

阅读 106

收藏
2022-05-25

共1个答案

小编典典

我会反方向回答。

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

长话短说,Linux\n用于新线、Windows\r\n和旧 Mac
\r。所以有多种方法可以编写换行符。例如,您的第二个工具(RegExr)确实匹配单个\r.

  1. [\r\n]+正如 Ilya 建议的那样,它会起作用,但也会匹配多个连续的换行符。(\r\n|\r|\n)更正确。
2022-05-25