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

标签 regex language-agnostic line-breaks

写作时this answer ,我必须专门匹配换行符,而不是使用 s-flag(dotall - 点匹配换行符)。

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

我注意到了

  • Regex101 仅匹配 \n
    上的换行符 (example - 删除 \r 并匹配)

  • RegExr 匹配 \n 上的换行符 也不 \r\n 上的换行符
    除了 m-flag 和 \s
    之外,我找不到任何东西可以使其与换行符匹配 (example)

  • Debuggex 的行为更加不同:
    this example它仅匹配 \r\n,而
    here它仅在 \n 上匹配,指定相同的标志和引擎

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

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

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

最佳答案

我会反方向回答。

  • 有关 \r\n 的完整解释,我必须引用这个问题,它比我在这里发布的要完整得多:Difference between \n and \r?
  • 长话短说,Linux 使用 \n 换行,Windows \r\n 和旧 Macs \r。所以有多种方法可以编写换行符。例如,您的第二个工具 (RegExr) 会匹配单个 \r

      正如 Ilya 所建议的
    1. [\r\n]+ 可以工作,但也可以匹配多个连续的换行符。 (\r\n|\r|\n) 更正确。

    关于regex - 匹配换行符 -\n 或\r\n?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20056306/

    相关文章:

    javascript - 使用javascript字符串换行

    javascript - 时间格式的正则表达式,如 DD :HH:MM:SS

    php - 如何读取文本文件并在冒号前搜索某个字符串,然后显示冒号后的内容?

    language-agnostic - 什么是 bool 网络?

    language-agnostic - 游戏开发和业务开发有什么区别?

    ios - 我如何快速发现我的字符串包含阿拉伯字符(英语或数字除外)

    c# - 使用正则表达式在 C# 代码文件中查找方法

    JavaScript 正则表达式 : Why causes a double backslash (\\) an error?

    line-breaks - 如何让 PhpED 保留行尾/换行符?

    PHP IMAP 格式