匹配换行符 – \ n还是\ r \ n?
在写这个答案时 ,我不得不完全匹配换行符,而不是使用s flag( dotall -dot matches linebreaks)。 
 尝试匹配\n或\r\n时,通常用于testing正则expression式的网站的行为会有所不同。 
我注意到
- 
Regex101仅在 \n上匹配换行符
 ( 例如 – 删除\r和它匹配)
- 
RegExr在 \n和\r\n上都不符合换行符
 除了mflag和\s之外,我找不到一个能够匹配换行符的东西
 ( 例子 )
- 
Debuggex的行为更加不同: 
 在这个例子中它只匹配\r\n,而
 这里只匹配\n,指定相同的标志和引擎
 我完全知道m -flag(多行 – 使匹配开始和$结束一行),但有时这不是一个选项。 与\s相同,因为它与选项卡和空格相匹配。 
 我以为使用unicode换行符( \u0085 )是不成功的,所以: 
- 有没有一种安全的方式来将匹配整合到一个换行符中(最好不pipe使用的语言如何)为正则expression式?
-  为什么上面提到的网站行为不同(特别是Debuggex,一次只匹配\n,一次只匹配\r\n)?
要朝相反的方向回答;)
2)关于\ r和\ n的完整解释我必须参考这个问题,这个问题比我在这里发表的要完整的多: \ n和\ r之间的区别?
长话短说,Linux使用\ n换行,Windows \ r \ n和旧的Mac \ r。 所以有多种方法来编写一个换行符。 您的第二个工具(RegExr)例如匹配单个\ r。
  1)Ilyabuild议的[\r\n]+会起作用,但也会匹配多个连续的新行。  (\r\n|\r|\n)更正确。 
Debuggex中的示例文本中有不同的行尾。 特别有趣的是,Debuggex似乎已经确定了您首先使用的是哪一行结束样式,并将所有input的其他行结束符转换为该样式。
我使用Notepad ++将Unix和Windows格式的示例文本粘贴到Debuggex中,而我先粘贴的是Debuggex会话的内容。
所以,在粘贴到Debuggex之前,您应该通过文本编辑器清理文本。 确保你粘贴你想要的风格。 Debuggex默认为Unix风格(\ n)。
另外,NEL(\ u0085)完全不同: https ://en.wikipedia.org/wiki/Newline#Unicode
  (\r?\n)将涵盖Unix和Windows。 你需要更复杂的东西,比如(\r\n|\r|\n) ,如果你想和旧的Mac相匹配的话。 
这只适用于问题1。
 我有一个在Windows上运行的应用程序,并使用多行MFC编辑器框。 
 编辑框预计CRLF linebreaks,但我需要parsing文字enterred 
 与一些真正的大/讨厌的正则expression式“。 
 所以在编写正则expression式时,我不想强调这一点 
 我最终在parsing器和编辑器之间来回正常化 
 正则expression式只是使用\n 。 我也陷阱粘贴操作,并将其转换为框。 
 这并不需要太多时间。 
 这是我用的。 
  boost::regex CRLFCRtoLF ( " \\r\\n | \\r(?!\\n) " , MODx); boost::regex CRLFCRtoCRLF ( " \\r\\n?+ | \\n " , MODx); // Convert (All style) linebreaks to linefeeds // --------------------------------------- void ReplaceCRLFCRtoLF( string& strSrc, string& strDest ) { strDest = boost::regex_replace ( strSrc, CRLFCRtoLF, "\\n" ); } // Convert linefeeds to linebreaks (Windows) // --------------------------------------- void ReplaceCRLFCRtoCRLF( string& strSrc, string& strDest ) { strDest = boost::regex_replace ( strSrc, CRLFCRtoCRLF, "\\r\\n" ); }