写作时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
) 的想法没有成功,所以:
- 是否有一种故障安全方法可以将换行符上的匹配(最好无论使用哪种语言)集成到正则表达式中?
- 为什么上述站点的行为不同(尤其是 Debuggex,仅在
\n
上匹配一次,而在\r\n
上仅匹配一次)?
最佳答案
我会反方向回答。
- 有关
\r
和\n
的完整解释,我必须引用这个问题,它比我在这里发布的要完整得多:Difference between \n and \r?
长话短说,Linux 使用 \n
换行,Windows \r\n
和旧 Macs \r
。所以有多种方法可以编写换行符。例如,您的第二个工具 (RegExr) 会匹配单个 \r
。
-
正如 Ilya 所建议的
[\r\n]+
可以工作,但也可以匹配多个连续的换行符。(\r\n|\r|\n)
更正确。
关于regex - 匹配换行符 -\n 或\r\n?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20056306/