6.33 Expressions rationnelles compatibles Perl
6 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
|
6.33.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ésultats,
$matches[1]
contient la
deuxième, 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 quelque chose 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, PREG_SET_ORDER);
foreach ($matches as $val) { echo "matched: " . $val[0] . "\n"; echo "part 1: " . $val[1] . "\n"; echo "part 2: " . $val[3] . "\n"; echo "part 3: " . $val[4] . "\n\n"; } ?>
|
Voir aussi
preg_match
,
preg_replace
et
preg_split
.
|