(PHP 4, PHP 5)
preg_match — Expression rationnelle standard
Analyse subject pour trouver l'expression qui correspond à pattern .
Le masque à chercher, sous la forme d'une chaîne de caractères .
La chaîne d'entrée.
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 :
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 ) )
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.
Version | Description |
---|---|
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
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.