El problema es que no está descrito bien el problema: nos están comentado que tenemos que sacar texto delimitado, pero que hay el problema de que el delimitador primero puede aparecer antes de lo que nos interesa.
Otro caso es que siempre apareciera, porque entonces sí que es fácil de resolver.
En cualquier caso, la solución sencilla es:
Using perl Syntax Highlighting
#!/usr/bin/perl -l
use strict;
use warnings;
use diagnostics;
my $cadena = 'Lo que aqui se muestra no se debe de imprimir,
pero lo que aqui se muestra sí se debe de imprimir fin
pero esto de aqui tampoco y esto de aqui también se deberá imprimir fin';
print "[$cadena]\n";
use Regexp::Common qw/balanced/;
while ( $cadena =~ /$RE{balanced}{-begin=>'aqui'}{-end=>'fin'}{-keep}/g) {
print "[$1]";
}
#print $RE{balanced}{-begin=>'aqui'}{-end=>'fin'};
__END__
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Con un simple módulo de búsqueda de patrones con delimitadores balanceados, nos sirve. La salida es:
Using text Syntax Highlighting
[Lo que aqui se muestra no se debe de imprimir,
pero lo que aqui se muestra sí se debe de imprimir fin
pero esto de aqui tampoco y esto de aqui también se deberá imprimir fin]
[aqui se muestra sí se debe de imprimir fin]
[aqui también se deberá imprimir fin]
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Eso sí, la expresión regular generada es bastante compleja (el último print comentado):
Using text Syntax Highlighting
(?-xism:(?-xism:(?:aqui(?:(?>[^af]+)|a(?!qui)|f(?!in)|(??{$Regexp::Common::balanced [0]}))*fin)))
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
pero la solución la tenemos, así que... asunto solucionado.