 |
preg_match_all (PHP 3 >= 3.0.9, PHP 4, PHP 5) preg_match_all -- Esegue un riconoscimento globale con le espressioni regolari Descrizioneint preg_match_all ( string espressione_regolare, string testo, array &TestiRiconosciuti [, int flags [, int offset]] )
La funzione ricerca tutte le espressioni regolari passate nel parametro espressione_regolare all'interno
della stringa testo. I testi riconosciuti sono posti all'interno
della matrice TestiRiconosciuti, nell'ordine specificato da
flags.
Dopo avere riconosciuto il primo segmento di testo, le ricerche seguenti
saranno effettuate a partire dall'ultima ricerca specificata.
Il parametro flags può essere la combinazione dei seguenti flag
(da notare che non ha senso utilizzare
PREG_PATTERN_ORDER in unione a
PREG_SET_ORDER):
- PREG_PATTERN_ORDER
I testi riconosciuti saranno organizzati in modo tale da avere
in $TestiRiconosciuti[0] la matrice di tutti i testi riconosciuti,
in $TestiRiconosciuti[1] la matrice di tutti i testi che soddisfino
il primo criterio di riconoscimento posto tra parentesi tonde, in
$TestiRiconosciuti[2] si avranno i testi che soddisfino il secondo
criterio e cosi via.
- PREG_SET_ORDER
Usando questo parametro come ordine dei riconoscimenti, si
avrà in $TestiRiconosciuti[0] una matrice con il primo set
di testi riconosciuti, in $TestiRiconosciuti[1], la matrice
con il secondo set di testi riconosciuti e così via.
In questo esempio $out[0] è la matrice del primo set di testi
riconosciuti. Nel dettaglio $out[0][0] conterrà il testo che incrocia
l'intero criterio impostato, $out[0][1] conterrà il testo riconosciuto
tramite il prima regola di riconoscimento presente nel criterio globale.
Analogo discorso si può fare per $out[1]. In questo caso il ragionamento
verrà svolto su un secondo segmento della stringa che soddisfi le
condizioni poste dal criterio di riconoscimento.
- PREG_OFFSET_CAPTURE
Se viene impostato questo flag, per ogni testo riconosciuto viene restituito
l'offset della stringa. Occorre notare che questo cambia il tipo di valore
restituito nell'array, infatti ogni elemento è, a sua volta, un'array composto dalla
stringa riconosciuta, all'indice 0, e dall'offset della stringa nell'indice
1. Questa costante è disponibile a partire dalla
versione 4.3.0 di PHP.
Qualora non si specifichi il parametro flags,
si assume per default il valore PREG_PATTERN_ORDER.
Normalemente la ricerca parte dall'inizio della stringa oggetto di ricerca. Con il parametro
opzionale offset si può specificare da dove cominciare
la ricerca. Equivale a passare substr()($testo, $offset) alla funzione
preg_match() al posto del parametro testo.
Il parametro offset è disponibile a partire dalla versione 4.3.3 di
PHP.
La funzione restituisce il numero dei riconoscimenti completi
svolti (che possono essere zero), oppure FALSE
se si verificano degli errori.
Esempio 1. Esempio di come ottenere tutti i numeri di telefono da un testo.
<?php preg_match_all("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x", "Call 555-1212 or 1-800-555-1212", $numeri); ?>
|
|
Esempio 2. Ricerca di tag HTML
<?php // Il parametro \\2 è un esempio di riferimento all'indietro. Questo dato informa la // libreria pcre che deve considerare il secondo set di parentesi tonde (in questo // caso il testo "([\w]+)"). Il backslash (\) aggiuntivo è reso obbligatorio dall'uso // dei doppi apici. $html = "<b>bold text</b><a href=howdy.html>click me</a>";
preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);
for ($i=0; $i< count($matches[0]); $i++) { echo "intero criterio: ".$matches[0][$i]."\n"; echo "parte 1: " . $matches[1][$i] . "\n"; echo "parte 2: " . $matches[3][$i] . "\n"; echo "parte 3: " . $matches[4][$i] . "\n\n"; } ?>
|
Questo esempio visualizzerà:
intero criterio: <b>bold text</b>
parte 1: <b>
parte 2: bold text
parte 3: </b>
intero criterio: <a href=howdy.html>click me</a>
parte 1: <a href=howdy.html>
parte 2: click me
parte 3: </a> |
|
Vedere anche preg_match(),
preg_replace()
e preg_split().
|  |