Manuel PHP

preg_match

(PHP 4, PHP 5)

preg_match — Expression rationnelle standard

Description

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

Analyse subject pour trouver l'expression qui correspond à pattern .

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

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.

flags

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.

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.

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). Comparez :

  1. <?php
  2. $subject = "abcdef";  
  3. $pattern = '/^def/';  
  4. preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);  
  5. print_r($matches);  
  6. ?> 

L'exemple ci-dessus va afficher :

Array ( )

avec cet exemple :

  1. <?php
  2. $subject = "abcdef";  
  3. $pattern = '/^def/';  
  4. preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);  
  5. print_r($matches);  
  6. ?> 

produira :

Array ( [0] => Array ( [0] => def [1] => 0 ) )

Valeurs de retour

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.

Historique

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

Exemples

Example#1 Trouve la chaîne "php"

  1. <?php
  2. // Le "i" après le délimiteur du pattern indique que la recherche ne sera pas sensible à la casse
  3. if (preg_match("/php/i", "PHP est le meilleur langage de script du web.")) { 
  4.    echo "Un résultat a été trouvé.";  
  5. } else { 
  6.    echo "Aucun résultat n'a été trouvé.";  
  7. }  
  8. ?> 

Example#2 Trouve le mot "web"

  1. <?php
  2. /* \b, dans le masque, indique une limite de mot, de façon à ce que le mot
  3. "web" uniquement soit repéré, et pas seulement des parties de mots comme
  4. dans "webbing" ou "cobweb" */  
  5. if (preg_match("/\bweb\b/i", "PHP est le meilleur langage de script du web.")) { 
  6.    echo "Le mot a été trouvé.";  
  7. } else { 
  8.    echo "Le mot n'a pas été trouvé.";  
  9. }  
  10.  
  11. if (preg_match("/\bweb\b/i", "PHP est le meilleur langage de script du web.")) { 
  12.    echo "Le mot a été trouvé.";  
  13. } else { 
  14.    echo "Le mot n'a pas été trouvé.";  
  15. }  
  16. ?> 

Example#3 Lire un nom de domaine dans une URL

  1. <?php
  2. // repérer le nom de l'hôte dans l'URL
  3. preg_match('@^(?:http://)?([^/]+)@i', 
  4.    "http://www.php.net/index.html", $matches);  
  5. $host = $matches[1];  
  6.  
  7. // repérer les deux derniers segments du nom de l'hôte
  8. preg_match('/[^.]+\.[^.]+$/', $host, $matches);  
  9. echo "Le nom de domaine est :{$matches[0]}\n";  
  10. ?> 

L'exemple ci-dessus va afficher :

Le nom de domaine est : php.net

Notes

Tip

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.


Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Breizh Blog