7.89 Expressions régulières compatibles Perl
7 Index des fonctions
Manuel PHP
. Introduction . Pré-requis . Installation . Configuration à l'exécution . Types de ressources . Constantes prédefinies . Exemples . options de recherche . syntaxe des masques . preg_grep ->preg_match_all . preg_match . preg_quote . preg_replace_callback . preg_replace . preg_split
|
7.89.11 preg_match_all()Expression régulière globale[ Exemples avec preg_match_all ] PHP 3>= 3.0.9, PHP 4
int
preg_match_all (
string
pattern
,
string
subject
,
array
matches
,
int
flags
)
preg_match_all
analyse
subject
pour trouver l'expression
pattern
et met les résultats dans
matches
,
dans l'ordre spécifié par
order
.
Après avoir trouvé un premier résultat,
la recherche continue jusqu'à la fin de la chaîne.
order
peut prendre une des deux valeurs suivantes
(notez bien qu'il est incohérent d'utiliser
PREG_PATTERN_ORDER
avec
PREG_SET_ORDER
) :
-
PREG_PATTERN_ORDER
-
L'ordre est tel que $matches[0] est un tableau qui
contient les résultats qui satisfont le masque
complet, $matches[1] est un tableau qui contient les
résultats qui satisfont la première
parenthèse capturante, etc..
Exemple avec preg_match_all et PREG_PATTERN_ORDER |
<?php preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<b>exemple : </b><div align=left>un test</div>", $out, PREG_PATTERN_ORDER); print $out[0][0].", ".$out[0][1]."\n"; print $out[1][0].", ".$out[1][1]."\n"; ?>
|
Cet exemple va afficher :
Resultat avec PREG_PATTERN_ORDER |
<b>exemple : </b>, <div align=left>un test</div>
exemple : , un test
|
Ainsi, $out[0] est un tableau qui contient les résultats qui
satisfont le masque complet, et $out[1] est un tableau qui contient
les balises entre > et <.
-
PREG_SET_ORDER
-
Les résultats sont classés de telle
façon que $matches[0] contient la première
série de résultat, $matches[1] contient la
deuxième série de résultat, etc...
Exemple avec preg_match_all et PREG_SET_ORDER |
<?php preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<b>exemple : </b><div align=left>un test</div>", $out, PREG_SET_ORDER); print $out[0][0].", ".$out[0][1]."\n"; print $out[1][0].", ".$out[1][1]."\n"; ?>
|
Cet exemple va afficher :
Résultat avec PREG_SET_ORDER |
<b>exemple : </b>, exemple : <div align=left>un test</div>, un test
|
Dans ce cas, $matches[0] est la première série de
résultat, et $matches[0][0] contient le texte qui satisfait
le masque complet, $matches[0][1] contient le texte de la
première parenthèse capturante, etc... De même,
$matches[1] contient le texte qui satisfait le masque complet, etc...
-
PREG_OFFSET_CAPTURE
-
Si cette option est activée, toutes les sous chaînes qui satisfont
le masque seront aussi identifiées par leur offset. Notez que cela
modifie le format de la valeur retournée , puisque chaque élément
de réponse devient un tableau contenant la sous-chaîne résultat,
à l'index
0
dans la chaîne
subject
constant
1
. Cette option a été ajoutée en
PHP
4.3.0 .
Si
order
est omis, PREG_PATTERN_ORDER est
utilisé par défaut.
preg_match_all
retourne le nombre de
résultat qui satisfont le masque complet, ou
FALSE
en cas d'échec ou d'erreur.
Extraction de tous les numéros de téléphone d'un texte. |
<?php preg_match_all("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x", "Appelez 555-1212 ou 1-800-555-1212", $phones); ?>
|
Recherche les couples de balises HTML (gourmand) |
<?php // Cet exemple utilise les références arrières (\\2). // Elles indiquent à l'analyseur qu'il doit trouver quelquechose qu'il // a déjà repéré un peu plus tôt // le nombre 2 indique que c'est le deuxième jeu de parenthèses // capturante qui doit être utilisé (ici, ([\w]+)). // L'antislash est nécessaire ici, car la chaîne est entre guillemets doubles
$html = "<B>Texte en gras</B><a href=salut.php>clique moi</a>";
preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);
for ($i=0; $i< count($matches[0]); $i++) { echo "Trouvé : ".$matches[0][$i]."\n"; echo "partie 1 : ".$matches[1][$i]."\n"; echo "partie 2 : ".$matches[3][$i]."\n"; echo "partie 3 : ".$matches[4][$i]."\n\n"; } ?>
|
Cet exemple va produire :
Trouvé : <B>Texte en gras</B>
partie 1 : <B>
partie 2 : Texte en gras
partie 3 : </B>
Trouvé : <a href=salut.php>clique moi</a>
partie 1 : <a href=salut.php>
partie 2 : clique moi
partie 3 : </a>
Voir aussi
preg_match
,
preg_replace
et
preg_split
.
|