Fonction preg_match() de PHP

Expressions régulières PHP (PCRE)

La fonction preg_match sert à effectuer une correspondance avec une expression régulière.

Syntaxe

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

Recherche dans subject une correspondance avec l'expression régulière donnée par pattern.

Description du paramètre :

  • $pattern : Le motif à rechercher, sous forme de chaîne.

  • $subject : La chaîne d'entrée.

  • $matches : Si le paramètre matches est fourni, il sera rempli avec les résultats de la recherche. $matches

  • $flags : les flags peuvent être définis sur les valeurs de flag suivantes :

    1. PREG_OFFSET_CAPTURE : Si ce flag est passé, pour chaque occurrence d'une correspondance, le décalage de chaîne (relatif à la chaîne cible) sera ajouté. Remarque : Cela modifie le tableau rempli dans le paramètre matches, en faisant de chaque élément un tableau où l'élément d'indice 0 est la chaîne correspondante et l'élément d'indice 1 est le décalage de cette chaîne correspondante dans la chaîne cible subject.

  • offset : Habituellement, la recherche commence au début de la chaîne cible. Le paramètre facultatif offset est utilisé pour spécifier le début de la recherche à partir d'une certaine position dans la chaîne cible (en octets).

Valeur de retour

Renvoie le nombre de correspondances pour pattern. Sa valeur sera 0 (aucune correspondance) ou 1, car preg_match() arrête la recherche après la première correspondance. preg_match_all() est différent ; il continue à rechercher subject jusqu'à atteindre la fin. Si une erreur se produit, preg_match() renvoie FALSE.

Exemples

Rechercher la chaîne de texte "php" :

<?php //Le 'i' après le délimiteur de motif indique une recherche insensible à la casse. if (preg_match("/php/i", "PHP est le langage de script web de choix.")) { echo "La chaîne correspondante php a été trouvée."; } else { echo "La chaîne correspondante php n'a pas été trouvée."; } ?>

Le résultat de l'exécution est le suivant :

查找到匹配的字符串 php.


Rechercher le mot "web"

<?php /*Le \b dans le motif marque une limite de mot, donc seul le mot isolé "web" sera mis en correspondance, et non * des parties d'un mot telles que "webbing" ou "cobweb"*/ if (preg_match("/\bweb\b/i", "PHP est le langage de script web de choix.")) { echo "Une chaîne correspondante a été trouvée.\n"; } else { echo "Aucune chaîne correspondante n'a été trouvée.\n"; } if (preg_match("/\bweb\b/i", "PHP est le langage de script de site web de choix.")) { echo "Une chaîne correspondante a été trouvée.\n"; } else { echo "Aucune chaîne correspondante n'a été trouvée.\n"; } ?>

Le résultat de l'exécution est le suivant :

Matching string found.


Obtenir le nom de domaine à partir de l'URL

<?php //Obtenir le nom d'hôte à partir de l'URL preg_match('@^(?:http://)?([^/]+)@i', "http://www.example.com/index.html", $matches); $host = $matches[1]; //Obtenir les deux dernières parties du nom d'hôte preg_match('/[^.]+\.[^.]+$/', $host, $matches); echo "le nom de domaine est : {$matches[0]}\n"; ?>

Le résultat de l'exécution est le suivant :

domain name is: example.com


Utilisation des sous-groupes nommés

<?php $str = 'foobar: 2008'; preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches); /*L'exemple suivant fonctionne sous PHP 5.2.2 (PCRE 7.0) ou version ultérieure ; toutefois, pour la rétrocompatibilité, l'approche ci-dessus est la syntaxe recommandée.*/ // preg_match('/(?<name>\w+): (?<digit>\d+)/', $str, $matches); print_r($matches); ?>

Le résultat de l'exécution est le suivant :

Array
(
    [0] => foobar: 2008
    [name] => foobar
    [1] => foobar
    [digit] => 2008
    [2] => 2008
)

Expressions régulières PHP (PCRE)

Autres extensions