preg_match_all
(PHP 4, PHP 5, PHP 7, PHP 8)
preg_match_all — Esegue un riconoscimento globale con le espressioni regolari
Descrizione
preg_match_all(
string $espressione_regolare
,
string $testo
,
array $&TestiRiconosciuti
,
int $flags
= ?,
int $offset
= ?):
int
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.
Example #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);
?>
Example #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().