Services webmasters
Partenaires
Jeux concours gratuits
 
preg_grep
<<<
preg_match_all preg_match
>>>

7.89 Expressions régulières compatibles Perl
7 Index des fonctions
 Manuel PHP

Introduction
Pré-requis
Installation
Configuration à l'exécution
Types de ressources
Constantes prédefinies
Exemples
options de recherche
syntaxe des masques
preg_grep
->preg_match_all
preg_match
preg_quote
preg_replace_callback
preg_replace
preg_split

7.89.11 preg_match_all()Expression régulière globale

[ Exemples avec preg_match_all ]   PHP 3>= 3.0.9, PHP 4

int  preg_match_all ( string   pattern , string   subject , array   matches , int   flags )

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 (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",
                     
    "<b>exemple : </b><div align=left>un 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 :
    Resultat avec PREG_PATTERN_ORDER

    <b>exemple : </b>, <div align=left>un test</div>
    exemple : , 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...
    Exemple avec preg_match_all et PREG_SET_ORDER
    
    <?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 :
    Résultat avec PREG_SET_ORDER
    
    <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...
    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.

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.php>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";
}
?>
Cet exemple va produire :
Trouvé : <B>Texte en gras</B>
partie 1 : <B>
partie 2 : Texte en gras
partie 3 : </B>

Trouvé : <a href=salut.php>clique moi</a>
partie 1 : <a href=salut.php>
partie 2 : clique moi
partie 3 : </a>

Voir aussi preg_match , preg_replace et preg_split .

<< preg_match_all >>
preg_grep Expressions régulières compatibles Perl preg_match
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -