Vous êtes ici > Liste des fonctions PHP et MySQL > Description de la fonction preg_match_all()

Accès au manager - réservé aux membres

Navigation

Moteurs de recherches sur les fonctions

Lancer une recherche sur les fonctions php et mysql

recherche

Fonction preg_match_all()

Définition


Expression rationnelle globale - (PHP 4, PHP 5)

Description

int preg_match_all ( string $pattern , string $subject , array &$matches [, int $flags [, int $offset ]] )

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.

Liste de paramètres

pattern

Le masque à chercher, sous la forme d'une chaîne de caractères.

subject

La chaîne d'entrée.

matches

Tableau contenant tous les résultats, dans un tableau multidimensionnel ordonné suivant le paramètre flags .

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.

<?php
preg_match_all
("|<[^>]+>(.*)</[^>]+>|U",
    
"<b>exemple : </b><div align=left>ceci est un test</div>",
    
$outPREG_PATTERN_ORDER);
echo 
$out[0][0] . ", " $out[0][1] . "\n";
echo 
$out[1][0] . ", " $out[1][1] . "\n";
?>

L'exemple ci-dessus va afficher :

<b>exemple : </b>, <div align=left>ceci est un test</div>
exemple : , ceci est 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ésultats, $matches[1] contient la deuxième, etc.

<?php
preg_match_all
("|<[^>]+>(.*)</[^>]+>|U",
    
"<b>exemple : </b><div align=\"left\">ceci est un test</div>",
    
$outPREG_SET_ORDER);
echo 
$out[0][0] . ", " $out[0][1] . "\n";
echo 
$out[1][0] . ", " $out[1][1] . "\n";
?>

L'exemple ci-dessus va afficher :

<b>exemple : </b>, exemple :
<div align="left">ceci est un test</div>, ceci est un test

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.

Si order est omis, PREG_PATTERN_ORDER est utilisé par défaut.

offset

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 (en octets).

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.

Valeurs de retour

Retourne le nombre de résultats qui satisfont le masque complet, ou FALSE si une erreur survient.

Historique

Version Description

4.3.3 Le paramètre offset a été ajouté.
4.3.0 Le drapeau PREG_OFFSET_CAPTURE a été ajouté.

Exemples

Exemple #1 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",
                
"Call 555-1212 or 1-800-555-1212"$phones);
?>

Exemple #2 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 "<b>texte en gras</b><a href=howdy.html>cliquez moi</a>";

preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/"$html$matchesPREG_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";
}
?>

L'exemple ci-dessus va afficher :

matched: <b>texte en gras</b>
part 1: <b>
part 2: texte en gras
part 3: </b>

matched: <a href=howdy.html>cliquez moi</a>
part 1: <a href=howdy.html>
part 2: cliquez moi
part 3: </a>

Exemple #3 Utilisation d'un sous-masque nommé

<?php

$str 
= <<<FOO
a: 1
b: 2
c: 3
FOO;

preg_match_all('/(?<name>\w+): (?<digit>\d+)/'$str$matches);

print_r($matches);

?>

L'exemple ci-dessus va afficher :

Array
(
    [0] => Array
        (
            [0] => a: 1
            [1] => b: 2
            [2] => c: 3
        )

    [name] => Array
        (
            [0] => a
            [1] => b
            [2] => c
        )

    [1] => Array
        (
            [0] => a
            [1] => b
            [2] => c
        )

    [digit] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [2] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

)



Bouts de code utilisant la fonction preg_match_all()

Récupération des données adsense et affichage de statistiques

<?php /* ... */
    $this->my_curl_setopt(CURLOPT_URL$this->cur_url);
    preg_match_all('<input[[:blank:]]+type="hidden"[[:blank:]]+name="(.*?)"[[' .
':blank:]]+value="(.*?)">'/* ... */ ?>


Contrôle l'équilibre majuscules / minuscules et le pourcentage de majuscules

<?php /* ... */
$chaine "Chaîne à tester POUR LES MAJUSCULES";
$nb_min preg_match_all('/[a-z]/'$chaine$res);
$nb_maj preg_match_all('/[A-Z]/'$chaine$res);
/* ... */ ?>


Bannir les mots d'un texte

<?php /* ... */
// la condition avec le test sur les mots du texte
if( preg_match_all($masque$description$matches)) {
// le message d'erreur
/* ... */ ?>


Trouver des urls dans un texte

<?php /* ... */
// FIN MASQUE
preg_match_all($masque,$chaine,$matches,PREG_SET_ORDER);
// le resultat se trouve dans le tableau $matches
/* ... */ ?>


Savoir si vos partenaires ont gardés vos liens sur leur site

<?php /* ... */
  $masque '#href="(.*?)"#i';
  preg_match_all("$masque",$chaine,$out,PREG_SET_ORDER);
 $i=-1;
/* ... */ ?>


Poster un commentaire

:P :) :wink: :lol: :surprised: :confused: :mad: :no:
Taille du texte:
Couleur:
Code de sécurité