Ruby正则表达式'反斜杠R'又名'\ R'模式

时间:2015-02-15 07:25:03

标签: ruby regex

我很确定我已经看到\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 rdocRegular Expressions都没有提到它。

任何正则表达式大师都会在这里放一个解释,这样至少可以用Google搜索吗?

提前致谢。

1 个答案:

答案 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])

这里与您的问题相关的是,它不是一个字符组,而是一个备选列表。鉴于序列不一定是单个字符,我想它不能成为一个字符组。这可能是以特殊的方式与否定相互作用,它只能用于字符和/或字符组。