8.94 Expressions rationnelles compatibles Perl
8 Référence des fonctions
Manuel PHP
. Introduction . Pré-requis . Installation . Configuration à l'exécution . Types de ressources . Constantes pré-définies . Exemples . options de recherche . syntaxe des masques . preg_grep ->preg_match_all . preg_match . preg_quote . preg_replace_callback . preg_replace . preg_split
|
8.94.11 preg_match_all()Expression rationnelle globale[ Exemples avec preg_match_all ] PHP 3>= 3.0.9, PHP 4 , PHP 5
int
preg_match_all (
string
pattern
,
string
subject
,
array
matches
,
int
flags
,
int
offset
)
preg_match_all
analyse
subject
pour trouver l'expression
pattern
et met les résultats dans
matches
,
dans l'ordre spécifié par
flags
.
Après avoir trouvé un premier résultat,
la recherche continue jusqu'à la fin de la chaîne.
flags
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", "<strong>exemple : </strong><div align=\"left\">un test</div>", $out, PREG_PATTERN_ORDER); echo $out[0][0] . ', ' . $out[0][1] . "\n"; echo $out[1][0] . ', ' . $out[1][1] . "\n"; ?>
|
-
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", "<strong>exemple : </strong><div align=\"left\">un test</div>", $out, PREG_SET_ORDER); echo $out[0][0] . ', ' . $out[0][1] . "\n"; echo $out[1][0] . ', ' . $out[1][1] . "\n"; ?>
|
-
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.
Normalement, la recherche commence au début de la chaîne
subject
. Le paramètre optionnel
offset
peut être utilisé pour spécifier
une position pour le début de la recherche.
Le paramètre
offset
a été introduit
depuis la version 4.3.3 de PHP.
Note |
Utiliser le paramètre
offset
ne revient pas
à passer
substr($subject, $offset)
à
preg_match_all
à la place de la chaîne
subject
, car
pattern
peut contenir des assertions comme
^
,
$
ou
(?<=x)
. Lisez la documentation
sur la fonction
preg_match
pour des exemples.
|
preg_match_all
retourne le nombre de
résultats 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 = '<strong>Texte en gras</strong><a href="salut.html">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"; } ?>
|
Voir aussi
preg_match
,
preg_replace
et
preg_split
.
|