(PHP 4, PHP 5, PHP 7)
preg_match — Effectue une recherche de correspondance avec une expression rationnelle standard
$pattern
, string $subject
[, array &$matches
[, int $flags = 0
[, int $offset = 0
]]] )
Analyse subject pour trouver l'expression qui
correspond à pattern.
patternLe masque à chercher, sous la forme d'une chaîne de caractères.
subjectLa 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_CAPTUREmatches qui devient un
tableau dont chaque élément est un tableau contenant la chaîne
correspondant au masque à l'offset 0 ainsi
que l'offset de la chaîne dans subject
à l'offset 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 (en octets).
Note:
Utiliser le paramètre
offsetne revient pas à passer substr($subject, $offset) à preg_match_all() à la place de la chaînesubject, carpatternpeut 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 1 si le pattern
fourni correspond, 0 s'il ne correspond pas, ou FALSE si une erreur
survient.
Cette fonction peut
retourner FALSE, mais elle peut aussi retourner une valeur équivalent à
FALSE. Veuillez lire la section sur
les booléens pour plus d'informations.
Utilisez l'opérateur ===
pour tester la valeur de retour exacte de cette fonction.
| Version | Description |
|---|---|
| 5.3.6 |
Retourne FALSE si offset est plus grand que la taille
de subject.
|
| 5.2.2 | Les sous-masques nommés acceptent maintenant la syntaxe (?<name>) et (?'name') mais aussi (?P<name>). Les anciennes versions n'acceptaient que la syntaxe (?P<name>). |
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 "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 #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";
?>
L'exemple ci-dessus va afficher :
Le nom de domaine est : php.net
Exemple #4 Utilisation des sous-masques nommés
<?php
$str = 'foobar: 2008';
preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches);
/* Ceci fonctionne également en PHP 5.2.2 (PCRE 7.0) et suivants,
* cependant, la syntaxe ci-dessus est recommandée pour des raisons
* de compatibilités ascendantes */
// preg_match('/(?<name>\w+): (?<digit>\d+)/', $str, $matches);
print_r($matches);
?>
L'exemple ci-dessus va afficher :
Array
(
[0] => foobar: 2008
[name] => foobar
[1] => foobar
[digit] => 2008
[2] => 2008
)