PDA

Visualizza la versione completa : Pattern Matching in Perl


jackmax
18-12-2003, 23:50
Ciao a tutti!

Ho una domanda abbastanza selvaggia, dedicata ai piu' esperti...

Devo processare un testo con uno script in Perl e ricercare una stringa compresa tra due parole, allora sono tentato di usare l'espressione regolare

/PAROLA1((.|\n)*)PAROLA2/

Il problema e' che PAROLA2 compare piu' volte all'interno del testo, quindi l'espressione mi restituisce la stringa piu' grande (quella tra la prima ricorrenza di PAROLA1 e l'ultima ricorrenza di PAROLA2).

Attualmente la mia soluzione consiste nel processare il testo piu' volte, contando le ricorrenze di PAROLA2, per poi modificare ulteriormente i pattern, ma cosi' i miei programmi perdono molto in termini di efficienza.

Qualcuno puo' darmi una mano?!?


Grazie e ciao!

Mich_
19-12-2003, 09:04
Credo che basti aggiungere un ? :

/PAROLA1((.|\n)*?)PAROLA2/

La motivazione la trovi nel manuale RE del perl (http://www.perldoc.com/perl5.6.1/pod/perlre.html) (paragrafo che inizia con <<By default, a quantified subpattern is "greedy", >> ).

Ciao
Michele

jackmax
19-12-2003, 12:22
Effettivamente...

FUNZIONA!

Perche' il punto di domanda fa si' che si ricerchi il numero minimo di ricorrenze di un certo Pattern (mentre di default ricerca sempre il numero massimo)!

Grazie mille per l'aiuto!

Loading