preg_grep
<<<
preg_match_all preg_match
>>>

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 .

<< preg_match_all >>
preg_grep Expressions rationnelles compatibles Perl preg_match