preg_match
(PHP 4, PHP 5)
preg_match — Expression rationnelle standard
Description
$pattern
, string $subject
[, array &$matches
[, int $flags
= 0
[, int $offset
= 0
]]] )
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 la valeur de
matches
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 danssubject
à l'offset 1.
-
-
offset
-
Normalement, la recherche commence au début de la chaîne
subject
. Le paramètre optionneloffset
peut être utilisé pour spécifier une position pour le début de la recherche (en octets).Note:
Utiliser le paramètre
offset
ne revient pas à passer substr($subject, $offset) à preg_match_all() à la place de la chaînesubject
, carpattern
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 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.
Historique
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>). |
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
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";
?>
<?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 )
Notes
Voir aussi
- Les Patterns PCRE
- preg_match_all() - Expression rationnelle globale
- preg_replace() - Rechercher et remplacer par expression rationnelle standard
- preg_split() - Éclate une chaîne par expression rationnelle
- preg_last_error() - Retourne le code erreur de la dernière expression PCRE exécutée