La fonction preg_match_all (PHP3 >3.0.9 - PHP 4)

La syntaxe :
preg_match_all (motif de chaine, chaine sujet, tableau résultat, paramètre optionnel);
preg_match_all renvoie dans un tableau toutes les occurences du motif trouvé dans la chaine sujet. Un ordre peut être envoyé par le paramètre optionnelAprè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..
Exemples avec preg_match_all
Exemple 1
Extraire des N° de téléphone d'une chaîne
Niveau de compréhension : facile
<?php
$chaine="Bonjour, merci de contacter le 01-99-99-55.55 ou au 0033 1 75-75-75-75
ou encore au 0495/999.999 ou même au 0032 99.99.99.99 dès que possible";
$motif='`(\d+\s?[./-]?)+`';
preg_match_all($motif,$chaine,$out);
$nb=count($out[0]);
for($i=0;$i<$nb;$i++)
{
echo $out[0][$i].'<br />';
}
?>
Explication :Voiçi un exemple avec preg_match_all permettant d'extraire une série de N° de téléphones placés dans une chaine de texte.
preg_match_all trouve la première occurence et recommence jusqu'au bout de la chaine.
Le motif tient compte des séparateurs tels que le point . le tiret - et le slash /
Le motif :
- on prend en compte les caractères numériques avec \d
- \s? signifie que les chiffres peuvent être suivi d'un espace.(facultatif)
- [./-]? ceci autorise un séparateur entre les chiffres. (facultatif)
Exemple 2
Extraire des liens <a href > d'une chaîne (ou d'une page)
Niveau de compréhension : facile
<?php
$chaine='Ceci est la page d\'un site sur les <a href="http://www.expreg.com">Expressions régulières</a> que j\'ai trouvé sur <a href="http://www.google.be" target="_top">Google.be</a> et que placé dans une chaine avec file_get_contents()';
$motif='`<a href="[^>]+">[^<]+</a>`';
preg_match_all($motif,$chaine,$out);
$count=count($out[0]);
for($i=0;$i<$count;$i++)
{
echo $out[0][$i],'<br/>';
}
?>
Explication :
Exemple d'utilisation de preg_match_all permettant de récupérer des lien <a href dans une chaine.
En utilisant file_get_contents() qui place le contenu d'une page dans une chaine, on peut matcher tous les liens contenu par exemple.
Exemple 3
Extraire des images d'un balisage perso (bbcode)
Niveau de compréhension : facile
<?php
$ch='texte [image]image1[/image] texte [image]image2[/image] texte [image]image3[/image] texte';
preg_match_all('`\[image]([^[]+)\[/image]`',$ch,$out);
echo '<pre>';
print_r($out);
echo '</pre>';
?>
Explication :
Aucune, suffit de regarder l'affichage obtenu
Array
(
[0] => Array
(
[0] => [image]image1[/image]
[1] => [image]image2[/image]
[2] => [image]image3[/image]
)
[1] => Array
(
[0] => image1
[1] => image2
[2] => image3
)
)
Exemple ..
Niveau de compréhension :
Explication :
Rédaction Yves Maistriaux :: Mai 2003
Dernière mise à jour :: Décembre 2005