preg_grep
<<<
preg_match_all preg_match
>>>

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 .

<< preg_match_all >>
preg_grep Expressions rationnelles compatibles Perl preg_match