【发布时间】:2013-12-02 02:32:48
【问题描述】:
在编写this answer 时,我必须只匹配换行符,而不是使用s-标志(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]+- 或者类似的东西 -
我使用:
\r?\n来匹配\r\n和\n行终止序列。它不适用于旧的\rMac 语法,但如今这种语法非常罕见。 -
大家好,我是 debuggex 的创始人。这看起来像一个错误(对于 debuggex,我不能代表其他人)。我添加了一个引用这个问题的高优先级问题。我们会尽快解决这个问题 - 我们目前正将所有(非常有限的)资源集中在推出另一款产品上。
-
@ridgerunner 添加 Mac 的语法,你可以这样做 (\r?\n|\r),这类似于下面 Peter van der Wal 的答案,但更紧凑(10 个字符对 12 个字符)。
标签: regex language-agnostic line-breaks