Sommaire
Expressions régulières compatibles Perl
preg_match
preg_match_all
preg_replace
preg_replace_callback
preg_split
preg_quote
preg_grep
options de recherche
syntaxe des masques
|
6.85.2 preg_match_all[ Exemples avec preg_match_all ] PHP 3>= 3.0.9, PHP 4 >= 4.0.0Description
int preg_match_all(string pattern ,string subject ,array matches ,[int order ])
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 :
- 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..
|
<?php preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<b>example: </b><div align=left>a 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 :
|
<b>exemple: </b>, <div align=left>ceci est un test</div>
exemple: , ceci est 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...
|
<?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 :
|
<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...
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.html>clique moi</?> preg_match_all ("/(<([\w]+)[?>]?>)(.*)(<\/\\?>)/", $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>bold text</?>
partie 1: <B>
partie 2: Test en gras
partie 3: </B>
trouvé: <a href=salut.html>clique moi</?>
partie 1: <a href=salut.html>
partie 2: clique moi
partie 3: </?>
|
Voir aussi
preg_match,
preg_replace
et preg_split.
|