我似乎无法弄清楚正确的语法,但我想要一个Perl正则表达式来查找一行中有两个或更多换行符的位置,并将它们压缩成仅2个换行符.
以下是我今天使用的似乎不起作用的内容:
$string =~ s/\n\n+/\n\n/g;
Run Code Online (Sandbox Code Playgroud)
请让我知道我做错了什么,以及我应该使用的正确的Perl正则表达式.
在此先感谢您的帮助!
如果您使用的是Perl 5.10或更高版本,请尝试以下操作:
$string =~ s/(\R)(?:\h*\R)+/$1$1/g;
Run Code Online (Sandbox Code Playgroud)
\R是泛型行分隔符转义序列(ref),并\h匹配任何水平空白字符(例如空格和TAB)(ref).因此,这会将一个或多个空行的任何序列转换为一个空行.
如今,大多数应用程序都是自由的,他们认为是行分隔符; 他们甚至会在同一文件中接受两种或更多种风格的分隔符的混合.另一方面,一些应用程序主动将所有行分隔符转换为一种首选样式.但有时你必须坚持一种特定的风格; 这就是为什么我抓住第一\R场比赛并将其用作替补,而不是任意使用\n.
请注意,这些特殊的转义序列在其他正则表达式中并未得到广泛支持.它们在PHP的最新版本中工作,并且\R似乎在Ruby 2.0中工作,但我找不到任何提及它的文档.Ruby 1.9.2和2.0支持\h转义序列,但它匹配十六进制数字([0-9a-fA-F]),而不是水平空格.在大多数其他口味,\R并且\h要么抛出一个异常或匹配文字R和h分别.