我很确定我已经看到“\R
在Ruby2中引入以匹配换行符,不管它们来自哪里:unix \n
,macos \r
或windows {{ 1}}“某个地方。也就是说,Ruby2应该像\r\n
一样对待\R
。
这很好用:
%r{\r\n|\r|\n}
甚至是否结合了行尾/ Feed:
▶ "a\nb".match /\R/
#⇒ #<MatchData "\n">
▶ "a\rb".match /\R/
#⇒ #<MatchData "\r">
▶ "a\r\nb".match /\R/
#⇒ #<MatchData "\r\n">
除非有人试图否定▶ "a\r\n\nb".match /\R{2}/
#⇒ #<MatchData "\r\n\n">
:
\R
否定▶ "a\nb".match /[^\R]+/
#⇒ #<MatchData "a\nb">
可以正常工作:
\n
不幸的是,▶ "a\nb".match /[^\n]+/
#⇒ #<MatchData "a">
非常难以谷歌。 Regexp
rdoc和Regular Expressions都没有提到它。
任何正则表达式大师都会在这里放一个解释,这样至少可以用Google搜索吗?
提前致谢。
答案 0 :(得分:4)
这是作者:https://github.com/k-takata/Onigmo/blob/master/doc/RE#L101。它说
\R Linebreak
Unicode:
(?>\x0D\x0A|[\x0A-\x0D\x{85}\x{2028}\x{2029}])
Not Unicode:
(?>\x0D\x0A|[\x0A-\x0D])
这里与您的问题相关的是,它不是一个字符组,而是一个备选列表。鉴于序列不一定是单个字符,我想它不能成为一个字符组。这可能是以特殊的方式与否定相互作用,它只能用于字符和/或字符组。