Expressions régulières PHP
Apprenez à utiliser les expressions régulières en PHP pour valider, rechercher et transformer des chaînes avec les fonctions preg_.
Une expression régulière (regex) est un motif qui décrit un ensemble de chaînes. En PHP, les expressions régulières vous permettent de rechercher du texte, de valider des entrées, d'extraire des données et de transformer des chaînes avec beaucoup moins de code qu'une logique manuelle caractère par caractère. Ce chapitre couvre la syntaxe, les fonctions preg_ et les techniques avancées les plus utiles, avec des exemples exécutables pour chacune.
Que sont les expressions régulières
Une expression régulière est une séquence de caractères qui définit un motif de recherche. Au lieu de correspondre à une chaîne fixe, un motif peut décrire toute une famille de chaînes — « n'importe quel chiffre », « une ou plusieurs lettres », « une chaîne ressemblant à un e-mail », etc. Cela rend les regex idéales pour :
- Valider les entrées utilisateur (e-mails, numéros de téléphone, codes postaux).
- Rechercher des sous-chaînes qui suivent une forme plutôt qu'une valeur exacte.
- Extraire des données — récupérer des numéros de commande, des dates ou des URL dans du texte libre.
- Remplacer et diviser du texte en fonction d'un motif.
PHP utilise PCRE (Perl-Compatible Regular Expressions), donc la syntaxe des motifs est la même qu'en Perl, JavaScript et la plupart des autres langages modernes.
Comment fonctionnent les expressions régulières en PHP
En PHP, les expressions régulières sont gérées par la famille de fonctions preg_. Chacune prend un motif comme premier argument et effectue une opération différente.
Fonctions preg_ courantes
| Fonction | Description |
|---|---|
preg_match() | Recherche la première correspondance. Retourne 1 en cas de correspondance, 0 si aucune correspondance, false en cas d'erreur |
preg_match_all() | Trouve toutes les correspondances. Retourne le nombre de correspondances complètes trouvées |
preg_replace() | Remplace chaque correspondance par une chaîne de remplacement |
preg_split() | Divise une chaîne en un array en utilisant le motif comme délimiteur |
preg_quote() | Échappe les caractères qui ont une signification spéciale dans un motif |
Un piège courant : preg_match() retourne 0 (falsy) pour aucune correspondance et false pour une erreur (comme un motif malformé). Utilisez l'opérateur === lorsque vous devez distinguer ces deux cas.
Les bases des expressions régulières PHP
Un motif PHP est une chaîne dont le corps est encadré par des délimiteurs (généralement /), suivi optionnellement de modificateurs :
Syntaxe des expressions régulières PHP
/pattern/modifiersOù pattern est la séquence de caractères à faire correspondre, et modifiers sont des lettres optionnelles qui modifient le comportement du motif. Les modificateurs les plus couramment utilisés en PHP sont :
i: Correspondance insensible à la casse (/php/icorrespond àPHP,Php,php).m: Mode multiligne —^et$correspondent au début/fin de chaque ligne, pas seulement de la chaîne entière.s: Mode « dotall » —.correspond également aux caractères de saut de ligne.u: Traite le motif et le sujet comme UTF-8. Utilisez ceci chaque fois que le texte peut contenir des caractères non-ASCII.
Éléments de construction courants des motifs
À l'intérieur du motif, quelques métacaractères font la plupart du travail :
| Token | Signification |
|---|---|
\d \w \s | Un chiffre, un caractère de mot, un caractère d'espace blanc |
. | N'importe quel caractère unique (sauf le saut de ligne, à moins que s soit défini) |
+ * ? | Un ou plusieurs, zéro ou plusieurs, zéro ou un du token précédent |
{2,4} | Entre 2 et 4 répétitions |
^ $ | Début et fin de la chaîne (ou de la ligne en mode m) |
[abc] | Une classe de caractères — n'importe lequel parmi a, b ou c |
(...) | Un groupe capturant |
| | Alternance — fait correspondre le motif d'un côté ou de l'autre |
Expression régulière PHP pour remplacer du texte
Utiliser les expressions régulières PHP pour valider les entrées utilisateur
L'une des utilisations les plus courantes des expressions régulières en PHP est de valider les entrées utilisateur. Par exemple, vous pouvez utiliser une expression régulière pour vous assurer qu'une adresse e-mail saisie par l'utilisateur est dans le bon format. Le code suivant montre comment cela peut être fait :
Expression régulière PHP pour s'assurer qu'une adresse e-mail saisie par l'utilisateur est dans le bon format
Remarque : Bien que cette regex fonctionne pour une validation basique, PHP fournit la fonction intégrée filter_var($email, FILTER_VALIDATE_EMAIL) pour une validation d'e-mail plus robuste et conforme à la RFC. Pour les workflows de formulaires complets, consultez PHP Form Validation.
Trouver toutes les correspondances
Alors que preg_match() s'arrête à la première correspondance, preg_match_all() collecte chaque correspondance dans un array. C'est l'outil pour extraire des données répétées, comme chaque mot, nombre ou balise dans une chaîne.
Extraire chaque nombre d'une chaîne
<?php
$text = "Room 12, floor 3, building 7";
$count = preg_match_all("/\d+/", $text, $matches);
echo $count; // Outputs: 3
print_r($matches[0]); // Outputs: Array ( [0] => 12 [1] => 3 [2] => 7 )
?>Diviser des chaînes
preg_split() découpe une chaîne en un array en utilisant un motif comme délimiteur. Contrairement à explode(), le délimiteur peut varier — ici nous divisons sur toute séquence de virgules et d'espaces :
<?php
$csv = "apple, banana, cherry";
$fruits = preg_split("/[\s,]+/", $csv);
print_r($fruits);
// Outputs: Array ( [0] => apple [1] => banana [2] => cherry )
?>Techniques avancées pour les expressions régulières PHP
Une fois les bases maîtrisées, ces techniques vous permettent d'écrire des motifs expressifs et précis.
Groupes capturants
Les parenthèses (...) capturent une partie d'une correspondance afin que vous puissiez la relire depuis le tableau $matches. L'index 0 contient la correspondance entière ; les index 1 et suivants contiennent chaque groupe.
Groupes nommés
(?<name>...) donne à un groupe une étiquette lisible, afin que vous puissiez extraire des valeurs par nom plutôt que par un index numérique — beaucoup plus clair pour les dates, les prix et autres données structurées.
<?php
$date = "2023-10-01";
preg_match("/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/", $date, $m);
echo $m["year"]; // Outputs: 2023
echo $m["month"]; // Outputs: 10
?>Alternance
L'opérateur | correspond à un motif ou à un autre. L'exemple ci-dessous correspond à l'animal qui apparaît en premier :
<?php
preg_match("/cat|dog|bird/", "I love cats", $m);
echo $m[0]; // Outputs: cat
?>Autres éléments de construction
- Groupes non capturants —
(?:...)regroupent des tokens ensemble (par exemple, pour appliquer un quantificateur) sans stocker la correspondance, ce qui garde le tableau$matchespropre. - Lookahead / lookbehind —
(?=...),(?!...),(?<=...),(?<!...)correspondent en fonction de ce qui vient avant ou après une position sans la consommer. - Quantificateurs —
{n},{n,}et{n,m}correspondent à un compte exact ou à une plage de répétitions, par ex.\d{4}pour exactement quatre chiffres.
Lorsque vous devez faire correspondre du texte fourni par l'utilisateur littéralement à l'intérieur d'un motif, passez-le d'abord par preg_quote() afin que des caractères comme . ou * soient échappés plutôt que traités comme des métacaractères.
Sujets connexes
- PHP RegEx (guide complet) — un parcours approfondi de la syntaxe PCRE en PHP.
- PHP Strings — les fonctions de chaînes non-regex que les regex complètent.
- PHP Form Validation — appliquer des motifs aux entrées de formulaires réels.
Conclusion
Les expressions régulières PHP sont un outil puissant qui peut vous aider à accomplir un large éventail de tâches. Que vous validiez des entrées utilisateur, que vous recherchiez dans du texte ou que vous effectuiez des manipulations de chaînes complexes, les expressions régulières sont une partie essentielle de la boîte à outils du développeur PHP.