Expressions régulières en PHP : des bases aux techniques avancées
Les expressions régulières (regex) sont un outil puissant pour rechercher, remplacer et analyser des données textuelles. En PHP, elles sont implémentées via un ensemble de fonctions PCRE (Perl Compatible Regular Expressions). Dans cet article, nous allons détailler les bases du travail avec les expressions régulières, examiner les fonctions clés et fournir des exemples pratiques qui vous aideront à automatiser le traitement des chaînes de caractères.
1. Fonctions principales pour travailler avec les expressions régulières en PHP
PHP fournit plusieurs fonctions intégrées pour travailler avec les expressions régulières. Examinons les plus populaires d'entre elles.
preg_match() — recherche de correspondance
La fonction preg_match() vérifie si une chaîne correspond à un modèle donné. Elle retourne 1 si une correspondance est trouvée, et 0 dans le cas contraire.
<?php
$text = "Bonjour le monde ! PHP est génial.";
$pattern = "/PHP/";
if (preg_match($pattern, $text)) {
echo "Le mot 'PHP' a été trouvé !";
} else {
echo "Aucune correspondance.";
}
?>
Si vous souhaitez obtenir la correspondance elle-même, transmettez un troisième argument — un tableau pour les résultats :
<?php
$text = "Mon email : user@example.com";
$pattern = "/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}/";
if (preg_match($pattern, $text, $matches)) {
echo "Email trouvé : " . $matches[0];
}
?>
preg_replace() — remplacement selon un modèle
La fonction preg_replace() remplace toutes les correspondances avec un modèle par une chaîne spécifiée. C'est un analogue de str_replace(), mais avec le support des expressions régulières.
<?php
$text = "Aujourd'hui nous sommes le 15.03.2024, et demain sera le 16.03.2024";
$pattern = "/(\\d{2})\\.(\\d{2})\\.(\\d{4})/";
$replacement = "$3-$2-$1"; // On réorganise les parties de la date
echo preg_replace($pattern, $replacement, $text);
// Affichera : Aujourd'hui nous sommes le 2024-03-15, et demain sera le 2024-03-16
?>
preg_split() — division d'une chaîne
La fonction preg_split() divise une chaîne selon une expression régulière. C'est plus pratique que explode() lorsque les séparateurs peuvent être différents.
<?php
$text = "pomme, poire ; banane : orange";
$pattern = "/[,;:]/"; // Séparateurs : virgule, point-virgule, deux-points
$fruits = preg_split($pattern, $text);
print_r($fruits);
// Array ( [0] => pomme [1] => poire [2] => banane [3] => orange )
?>
2. Métacaractères et syntaxe des expressions régulières
Pour utiliser efficacement les expressions régulières, il est nécessaire de comprendre leur syntaxe. Voici les principaux métacaractères :
.— n'importe quel caractère (sauf le saut de ligne)^— début de la chaîne$— fin de la chaîne*— 0 répétition ou plus+— 1 répétition ou plus?— 0 ou 1 répétition\\d— chiffre (0-9)\\w— lettre, chiffre ou tiret bas\\s— caractère d'espacement[abc]— n'importe quel caractère de l'ensemble(...)— groupe de capture
Exemple : validation d'un numéro de téléphone
<?php
$phone = "+7 (123) 456-78-90";
$pattern = "/^\\+7\\s\\(\\d{3}\\)\\s\\d{3}-\\d{2}-\\d{2}$/";
if (preg_match($pattern, $phone)) {
echo "Le numéro de téléphone est correct !";
} else {
echo "Format de numéro invalide.";
}
?>
3. Techniques avancées et modificateurs
Les modificateurs modifient le comportement de l'expression régulière. Ils sont indiqués après le slash de fermeture. Examinons les plus utiles :
i— recherche insensible à la cassem— mode multiligne (^ et $ fonctionnent pour chaque ligne)s— le point inclut le caractère de saut de ligneu— prise en charge d'Unicode