Bienvenido a los foros de Perl en Español, magnobalt.
El problema es que lo que quieres conectar está repartido por varias líneas, así que depende de cómo leas el fichero, tendrás que aplicar distintas expresiones regulares.
Para el caso de leer todo el fichero de golpe, hay que indicar en la expresión regular que la cadena de texto está compuesta de varias líneas, con la opción
/s:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
my $fichero;
open my $FILE, q[<], 'code_21426_3.txt';
while (my $linea = <$FILE>) {
$fichero .= $linea;
}
close $FILE;
$fichero =~ m/EMPIEZA_AQUI\s*(.*?)\s*TERMINA_AQUI/s;
print "$1\n";
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Con los
\s* nos deshacemos de los caracteres espacio que no queremos capturar, que lo hacemos con
(.*?), que captura todo lo que haya antes de la siguiente etiqueta.
De otra forma, yendo línea a línea, podemos usar el operador rango para extraer las líneas una a una de la parte que nos interesa.
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
open my $FILE, q[<], 'code_21426_3.txt';
while (<$FILE>) {
if ( /EMPIEZA_AQUI/ .. /TERMINA_AQUI/ ) {
print if not /AQUI/; # pintamos la línea, salvo la primera y última
}
}
close $FILE;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
que es la versión larga de
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
open my $FILE, q[<], 'code_21426_3.txt';
my $en_rango;
while (<$FILE>) {
if ( /EMPIEZA_AQUI/ ) {
$en_rango = 1;
next;
}
if ( /TERMINA_AQUI/ ) {
$en_rango = 0;
next;
}
if ( $en_rango ) {
print;
}
}
close $FILE;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4