-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


indietro

[16] Come posso fare, in maniera efficiente, un match di più espressioni regolari alla volta? regex, efficienza regexp, efficienza espressione regolare, efficienza

(contributo di brian d foy )

Evitando di chiedere al Perl di compilare una espressione regolare ogni qualvolta volete effettuarne il match. In questo esempio, perl deve ricompilare l'espressione regolare per ogni iterazione del ciclo foreach(), visto che non ha modo di conoscere cosa sarà $pattern.

    @pattern = qw( foo bar baz );
    
    LINE: while( <> ) 
    	{
		foreach $pattern ( @pattern ) 
		{
	    		print if /\b$pattern\b/i;
	    		next LINE;
	   	}
	}

L'operatore qr// comparì nel perl 5.005. Esso compila una espressione regolare, ma non la usa. Quando utilizzate la versione precompilata della espressione regolare, il perl compie meno lavoro. In questo esempio, si è inserito un map() per convertire ogni pattern nella sua forma precompilata. Il resto dello script è lo stesso, ma più veloce.

    @pattern = map { qr/\b$_\b/i } qw( pippo pluto paperino );
    LINE: while( <> ) 
    	{
		foreach $pattern ( @pattern ) 
		{
	    		print if /\b$pattern\b/i;
	    		next LINE;
	   	}
	}

In alcuni casi, potreste essere in grado di comporre diversi pattern in una singola espressione regolare. Tuttavia fate attenzione a situazioni che richiedono il backtracking.

	$espres_reg = join '|', qw( pippo pluto paperino );
    LINE: while( <> ) 
    	{
		print if /\b(?:espres_reg)\b/i;
	}

Per maggiori dettagli sull'efficienza delle espressioni regolari, consultate Mastering Regular Expressions di Jeffrey Freidl. Egli spiega come funziona il motore delle espressioni regolari e perché alcuni pattern sono sorprendentemente inefficienti. Una volta che avete capito come il perl usa le espressioni regolari, potete regolarle per le singole situazioni.

vedi in inglese

AUTORE E COPYRIGHT

Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan Torkington. Tutti i diritti riservati.

Questa documentazione è libera; puoi ridistribuirla e/o modificarla secondo gli stessi termini applicati al Perl.

Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di codice in questo file sono rilasciati al pubblico dominio. Potete, e siete incoraggiati a farlo, utilizzare il presente codice o qualunque forma derivata da esso nei vostri programmi per divertimento o per profitto. Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese ma non è obbligatorio.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google