int preg_match ( string pattern, string subject [, array &matches [, int flags [, int offset]]] )
preg_match() analyse subject
pour trouver l'expression qui correspond à pattern.
Si matches est fourni, il sera rempli par
les résultats de la recherche. $matches[0] contiendra le
texte qui satisfait le masque complet, $matches[1] contiendra
le texte qui satisfait la première parenthèse capturante,
etc.
Le paramètre flags peut prendre l'une des valeurs
suivantes :
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 .
Le paramètre flags a été ajouté en
PHP 4.3.0 .
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.
Comparez :
preg_match() retourne le nombre de fois où le
masque pattern a été trouvé. Cela peut aller de
0 (pas de solution) Ã un 1 car preg_match() s'arrête
dès qu'elle a trouvé une première solution. preg_match_all(),
au contraire, va continuer jusqu'Ã la fin de la chaîne subject.
preg_match() retourne FALSE si une erreur survient.
Astuce :
N'utilisez pas preg_match() si vous voulez uniquement
savoir si une chaîne est contenue dans une autre.
Utilisez dans ce cas les fonctions
strpos() ou strstr(),
qui sont beaucoup plus rapides.
Exemple 1. Trouve la chaîne "php"
<?php // Le "i" après le délimiteur du pattern indique que la recherche ne sera pas sensible à la casse if (preg_match("/php/i", "PHP est le meilleur langage de script du web.")) { echo 'Un résultat a été trouvé.'; } else { echo 'Aucun résultat n\'a été trouvé.'; } ?>
Exemple 2. Trouve le mot "web"
<?php /* \b, dans le masque, indique une limite de mot, de façon à ce que le mot "web" uniquement soit repéré, et pas seulement des parties de mots comme dans "webbing" ou "cobweb" */ if (preg_match("/\bweb\b/i", "PHP est le meilleur langage de script du web.")) { echo 'Un mot a été trouvé.'; } else { echo 'Un mot n\'a pas été trouvé.'; }
if (preg_match("/\bweb\b/i", "PHP est le meilleur langage de script pour les webagency.")) { echo 'Un mot a été trouvé.'; } else { echo 'Un mot n\'a pas été trouvé.'; } ?>
Exemple 3. Lire un nom de domaine dans une URL
<?php // repérer le nom de l'hôte dans l'URL preg_match('@^(?:http://)?([^/]+)@i', "http://www.php.net/index.html", $matches); $host = $matches[1];
// repérer les deux derniers segments du nom de l'hôte preg_match('/[^.]+\.[^.]+$/', $host, $matches); echo "Le nom de domaine est : ".$matches[0]."\n"; ?>