为什么这不计算字符串末尾的CRLF?

时间:2018-10-09 08:06:12

标签: regex perl

我有这段代码,希望可以将CRLF计入字符串的末尾。 它目前无法正常工作,我也看不到原因。

printf "text is [%s]", $text;   # debug this
my $number = ( $text =~ /\R$/ );
sprintf "File has [%i] errant CRLFs at the EOF\n", $number;

1 个答案:

答案 0 :(得分:2)

有两个问题。您需要使用全局匹配才能找到多个匹配项。另外,您的正则表达式仅匹配最后一个<div class="no-flick"></div>

因此,对于正则表达式,请使用与此\R相匹配的m/\R(?=\R*$)/g,其后必须跟0或多个\R,然后是字符串的结尾。

另一个问题是此\R不能返回匹配数目。如果存在匹配项,则返回my $number = ( $text =~ /\R$/ );。为此,您应该使用while循环(对于正则表达式使用1标志)

最后,最后一行应该是g,而不是printf

sprintf

输出:

use strict;
use warnings;

my $text = "ASD
ASD
ASD
ASD





";

printf "text is [%s]", $text;   # debug this

my $number = 0;
$number++ while $text =~ m/\R(?=\R*$)/g;
# # or use this instead:
# my $number = () = $text =~ m/\R(?=\R*$)/g;


printf "\n\nFile has [%i] errant CRLFs at the EOF\n", $number;