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 :

<?php
$subject 
"abcdef" ;
$pattern  '/^def/' ;
preg_match ( $pattern $subject $matches PREG_OFFSET_CAPTURE 3 );
print_r ( $matches );
?>

L'exemple ci-dessus va afficher :


Array
(
)

         

avec cet exemple :

<?php
$subject 
"abcdef" ;
$pattern  '/^def/' ;
preg_match ( $pattern substr ( $subject , 3 ),  $matches PREG_OFFSET_CAPTURE );
print_r ( $matches );
?>

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

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é.
Version Description

Exemples

Exemple 1885. 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 1886. 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 
"Le mot a été trouvé." ;
} else {
    echo 
"Le mot n'a pas été trouvé." ;
}

if (
preg_match ( "/\bweb\b/i" "PHP est le meilleur langage de script du web." )) {
    echo 
"Le mot a été trouvé." ;
} else {
    echo 
"Le mot n'a pas été trouvé." ;
}
?>

Exemple 1887. 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" ;
?>

L'exemple ci-dessus va afficher :


Le nom de domaine est : php.net

    

Notes

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.

Voir aussi

preg_match_all()preg_replace()preg_split()