Para detectar líneas en blanco, necesitas un patrón como este:
/(\n\n+)/.
Un solo "\n" detecta el fin de línea de todas las líneas, pero lo importante es ver qué línea no tiene nada (excepto el propio carácter de fin de línea).
Con ese patrón, podemos saber el número de líneas en blanco haciendo un
length($1)-1 (hay que descontar el primer "\n").
Using perl Syntax Highlighting
#!/usr/bin/perl
use Modern::Perl '2012'; # Somos modernos
use utf8::all; # Turn on UTF-8. All of it.
my $pruebas = <<EOF;
aababaabb
aaaab
ababbabbababbbbbbababbabba
aaaaaabbbbbb
EOF
my $número_líneas_en_blanco = 0;
while ($pruebas =~ /(\n\n+)/gsm) {
$número_líneas_en_blanco += length($1) - 1;
}
say "Número de líneas en blanco: $número_líneas_en_blanco";
__END__
Número de líneas en blanco: 2
Coloreado en 0.005 segundos, usando
GeSHi 1.0.8.4
Para el caso de las 'a' y 'b', hay que contemplar el caso de que la secuencia empiece por cualquiera de ellas. Y solo nos interesa el caso de que haya más de una. Un posible patrón sería parecido al anterior, pero podemos abreviarlo así:
/a{2,}|b{2,}/, que quiere decir que buscamos por dos o más letras 'a' o dos más letras 'b'.
Using perl Syntax Highlighting
#!/usr/bin/perl
use Modern::Perl '2012'; # Somos modernos
use utf8::all; # Turn on UTF-8. All of it.
my $pruebas = <<EOF;
aababaabb
aaaab
ababbabbababbbbbbababbabba
aaaaaabbbbbb
EOF
while ($pruebas =~ /(a{2,}|b{2,})/gsm) {
say "[$1]";
}
__END__
[aa]
[aa]
[bb]
[aaaa]
[bb]
[bb]
[bbbbbb]
[bb]
[bb]
[aaaaaa]
[bbbbbb]
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Ahora ya solo queda juntarlo todo
/(a{2,}|b{2,}|\n\n+)/smg o así:
/(a{2,}|b{2,}|\n{2,})/smgPero... dices que no quieres solo buscar, sino reemplazar, así que debemos empezar a pensar en usar el operador
s///.