Почему это не считается CRLF в конце строки? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть этот код, который, я надеюсь, будет подсчитывать 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 голосов
/ 09 октября 2018

Есть пара проблем.Вам нужно использовать глобальное совпадение, чтобы найти несколько совпадений.Также ваше регулярное выражение просто соответствует последнему \R

Так, для регулярного выражения используйте это m/\R(?=\R*$)/g, которое соответствует \R, за которым следует 0 или более \R, а затем конец строки.

Другая проблема заключается в том, что my $number = ( $text =~ /\R$/ ); не возвращает количество совпадений.Возвращает 1, если есть совпадение.Для этого вы должны использовать цикл while (с флагом 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;

Выход:

text is [ASD
ASD
ASD
ASD





]

File has [6] errant CRLFs at the EOF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...