Programmation PHP/Expressions rationnelles

Un livre de Wikilivres.
Aller à : navigation, rechercher


Syntaxe[modifier | modifier le wikicode]

Expressions rationnelles courantes
Caractère Type Explication
. Point n'importe quel caractère
[...] classe de caractères tous les caractères énumérés dans la classe
[^...] classe complémentée Tous les caractères sauf ceux énumérés
^ circonflexe marque le début de la chaine, la ligne...
$ dollar marque la fin d'une chaine, ligne...
| barre verticale alternative - ou reconnaît l'un ou l'autre
(...) parenthèse utilisée pour limiter la portée d'un masque ou de l'alternative
* astérisque 0, 1 ou plusieurs occurrences
+ le plus 1 ou plusieurs occurrence
? interrogation 0 ou 1 occurrence

Débogueur : https://regex101.com/

  • ?! : négation (ex : '#^((?!sous-chaine_exclue).)#').
  • $1 : résultat du premier groupe de capture.
  • ?: : ignorer le groupe de capture lors de leur numérotation.
Classe Prédéfinie en PHP
Classe Signification
[[:alpha:]] n'importe quelle lettre
[[:digit:]] n'importe quel chiffre
[[:xdigit:]] caractères hexadécimaux
[[:alnum:]] n'importe quelle lettre ou chiffre
[[:space:]] n'importe quel espace blanc
[[:punct:]] n'importe quel signe de ponctuation
[[:lower:]] n'importe quelle lettre en minuscule
[[:upper:]] n'importe quelle lettre capitale
[[:blank:]] espace ou tabulation
[[:graph:]] caractères affichables et imprimables
[[:cntrl:]] caractères d'échappement
[[:print:]] caractères imprimables exceptés ceux de contrôle

En plus de ces classes prédéfinies, les propriétés Unicode sont aussi prédéfinies[1].

À faire...
link={{{link}}}

Exemples Unicode (/u).

S'ajoute à cela les combinaisons suivantes[2] :

\A     Début de chaine
\z     Fin de chaine
\s     Caractères espace
\S     Non caractères espace
\d     Chiffre
\D     Non chiffre
\w     Lettre, chiffre ou underscore
\W     Caractère qui n'est pas lettre, chiffre ou underscore
\b     Caractère de début ou fin de mot
Attention !
link={{{link}}}

En PHP, les patterns regex doivent toujours être entourés d'un symbole délimiteur. On utilise généralement l'accent grave (`), mais on trouve aussi souvent / et #. Ceci sous peine de ne pas fonctionner : Warning: no ending delimiter found.

Recherche[modifier | modifier le wikicode]

La fonction preg_match est la principale fonction de recherche[3]. Elle renvoie un booléen et demande deux paramètres obligatoires : l'expression rationnelle et la chaine à scanner. Le troisième paramètre correspond à la variable dans laquelle stocker le tableau des résultats.

<?php
$chaine="Test regex PHP pour Wikibooks francophone.";

if (preg_match('`.*Wikibooks.*`', $chaine)) {
	print("Le texte parle de Wikibooks");
} else {
	print("Le texte ne parle pas de Wikibooks"); 
}
?>

Pour obtenir tous les résultats dans un tableau, remplacer preg_match par preg_match_all[4], et print par print_r.

Attention !
link={{{link}}}

Pour chercher un dollar, "\$" ne fonctionne pas car c'est le format de certaines variables, utiliser donc des apostrophes au lieu des guillemets : '\$'.

Remplacement[modifier | modifier le wikicode]

La fonction preg_replace comprend trois paramètres : remplacé, remplaçant, chaine à traiter.

<?php
// Remplace tous les espaces par des underscores
$chaine="Test regex PHP pour Wikibooks francophone.";
$chaineTriee=preg_replace('`( )`','_',$chaine);
echo $chaineTriee;
?>

Références[modifier | modifier le wikicode]