mercredi 16 septembre 2015

Les expressions regulieres

High-Tech
Santé-Médecine
Droit-Finances
CodeS-SourceS
AppsTV
Inscrivez-vous
Langue
Connexion
CommentCaMarche CommentCaMarche / Twitter CommentCaMarche / Facebook Recevez notre newsletter

Encyclopédie
Forum
Astuces
Télécharger
News
Sites
Pro
Emploi
A la recherche d'un emploi ?
Encyclopédie Webmasters PHP Charte

Découvrez les offres de lâ Rentrée Darty
PHP - Expressions régulières
Septembre 2015
Qu'est-ce qu'une expression régulière?
Construire une expression régulière
Les classes de caractères
Les fonctions de manipulation d'expressions régulières
Les fonctions ereg() et eregi()
Les fonctions ereg_replace() et eregi_replace()
La fonction split()
La fonction sql_regcase()
A lire aussi: Les expressions régulières

Qu'est-ce qu'une expression régulière?

Les expressions régulières sont des modèles créés à

l'aide de caractères ASCII permettant de manipuler des
chaînes de caractères, c'est-à-dire permettant de trouver les portions de
la chaîne correspondant au modèle. Ce système est emprunté au système
POSIX (un système d'exploitation). De nombreux scripts sous UNIX

les utilisent (notamment Perl).



En réalité il s'agit d'un système fort ingénieux (et aussi très
puissant) permettant de retrouver un mot, ou une phrase (et même beaucoup d'autres choses en réalité)
dans un texte, ressemblant au modèle que l'on a construit...

Construire une expression régulière

Les expressions régulières permettent de rechercher des occurrences (c'est-à-dire une suite
de caractères correspondant à ce que l'on recherche) grâce à une série
de caractères spéciaux. L'expression régulière en elle-même est donc
une chaîne de caractère contenant des caractères spéciaux et des caractères standards...



Les symboles ^ et $ indiquent le début ou la fin d'une chaîne, et permettent donc de la délimiter.


"^debut": chaîne qui commence par "debut"
"fin$": chaîne qui se termine par "fin"
"^chaîne$": chaîne qui commence et se termine par "chaîne"
"abc": chaîne contenant la chaîne "abc"

Les symboles *, + et ?, respectivement "zero ou plusieurs", "un ou plusieurs", "un ou aucun", permettent de donner une notions de nombre.

"abc+": chaîne qui contient "ab" suivie de un ou plusieurs "c" ("abc", "abcc" ...)
"abc*": chaîne qui contient "ab" suivie de zero ou plusieurs "c" ("ab", "abc" ...)
"abc?": chaîne qui contient "ab" suivie de zero ou un "c" ("ab" ou "abc")
"^abc+": chaîne commençant par "ab" suivie de un ou plusieurs "c" ("abc", "abcc" ...)



Les accolades {X,Y} permettent de donner des limites de nombre.


"abc{2}": chaîne qui contient "ab" suivie de deux "c" ("abcc")
"abc{2,}": chaîne qui contient "ab" suivie de deux "c" ou plus ("abcc" etc..)
"abc{2,4}": chaîne qui contient "ab" suivie 2, 3 ou 4 "c" ("abcc" .. "abcccc")

A noter que le premier nombre de la limite ("{0,2}", mais pas "{,2}") est obligatoire. Les symboles vu précedemment ('*', '+', and '?') sont équivalents à "{0,}", "{1,}", et "{0,1}".


Les parenthèses ( ) permettent de représenter une séquence de caractères.


"a(bc)*": chaîne qui contient "a" suivie de zero "bc" ou plus

La barre verticale | se comporte en tant qu'opérateur OU

"un|le": chaîne qui contient "un" ou "le"
"(un|le) chien": chaîne qui contient "un chien" ou "le chien"
"(a|b)*": chaîne qui contient une suite de "a" ou de "b"

Le point . indique n'importe quel caractère (une fois)

"^.{3}$": chaîne qui contient 3 caractères

Les crochets [ ] définissent une liste de caractères autorisés (ou interdits). Le signe - permet quand à lui de définir un intervalle. Le caractère ^ après le premier crochet indique quand à lui une interdiction.

"[abc]": chaîne qui contient un "a", un "b", ou un "c"

"[a-z]": chaîne qui contient un caractère compris entre "a" et "z"

"^[a-zA-Z]": chaîne qui commence par une lettre
"^[^a-zA-Z]": chaîne qui ne commence pas par une lettre




Pour rechercher un caractère faisant partie des caractères spéciaux, il suffit de le faire précéder

d'un antislash (sauf entre crochets)
un antislash doit donc être doublé!


En effet dans les crochets, chaque caractère représente ce qu'il est. Pour représenter un ] il faut le mettre en premier (ou après un ^ si c'est une interdiction), un - se met en premier ou en dernier.

"[\+?{}.]": chaîne qui contient un de ces six caractères
"[]-]": chaîne qui contient le caractère "]" ou le caractère "-"

Voici un tableau récapitulatif des caractères spéciaux utilisés dans les expressions régulières :


Caractère Utilité
[] Les crochets définissent une liste de caractères autorisés
() Les parenthèses définissent un élément composé de l'expression régulière qu'elle contient
{} Les accolades lorsqu'elles contiennent un ou plusieurs chiffres séparés par des virgules représentent le nombre de fois que l'élément précédant les accolades peut se reproduire
(par exemple p{3,5} correspond à ppp, pppp ou ppppp)
- Un moins entre deux caractères dans une liste représente un intervalle (par exemple [a-d] représente [abcd])
. Le caractère point représente un caractère unique
* Le caractère astérisque indique la répétition indéterminée de l'élément la précédant
? Le caractère "point d'interrogation indique la présence éventuelle de l'élément la précédant
| Occurrence de l'élément situé à gauche de cet opérateur ou de celui situé à droite (lard | cochon)
^
Placé en début d'expression il signifie "chaîne commençant par .. ".
Utilisé à l'intérieur d'une liste il signifie "ne contenant pas les caractères suivants...
$ Placé en fin d'expression il signifie "chaîne finissant par .. "

Les classes de caractères

Il peut également être utile de vérifier si une chaîne contient
des caractères d'un certain type (numérique, alphanumérique, ...) sans
avoir à les énumérer. Pour cela les expressions régulières
définissent des classes de caractères, dont la syntaxe est :





[:classe:]

Les classes de caractères sont celles définies par UNIX. Voici un tableau
récapitulant certaines de ces classes :




Nom de la classe Description
[:alnum:] caractères alphanumériques (équivalent à [A-Za-z0-9])
[:alpha:] caractères alphabétiques ([A-Za-z])
[:blank:] caractères blanc (espace, tabulation)
[:ctrl:] caractères de contrôle (les premiers du code ASCII
[:digit:] chiffre ([0-9])
[:graph:] caractère d'imprimerie (qui fait une marque sur l'écran en quelque sorte)
[:print:] caractère imprimable (qui passe à l'imprimante ... tout sauf les caractères de contrôle)
[:punct:] caractère de ponctuation
[:space:] caractère d'espacement
[:upper:] caractère majuscule
[:xdigit:] caractère hexadécimal


Voici quelques exemples d'utilisation des classes de caractère dans une expression régulière :


chaîne composée d'un ou plusieurs caractère(s) alphanumérique(s)


"^[:alnum:]+$"

chaîne contenant un caractère de ponctuation ou un caractère d'espacement

"[:punct:]|[:space:]"

Un nombre

"^[:digit:]+$"
Les fonctions de manipulation d'expressions régulières

PHP fournit quelques fonctions de bases permettant de manipuler des chaînes à l'aide
d'expressions régulières.

Les fonctions ereg() et eregi()

La fonction ereg() dont la signature est la suivante :

Booleen ereg(chaîne modele,chaîne texte[,tableau occurrences])

permet d'évaluer le texte passer en argument grâce au modèle (qui
est une expression régulière) et stocke toutes les occurrences dans un
tableau passé optionnellement en paramètre. Lorsque la fonction trouve des occurrences,
elle renvoie true, sinon elle retourne false.



La fonction eregi() dont la signature est la suivante :

Booleen eregi(chaîne modele,chaîne texte[,tableau occurrences])

effectue le même travail que sa consoeur ereg(), à la différence
près qu'elle n'est pas sensible à la casse (pas de différenciation
minuscules/majuscules)


(.*)",$page,$regs); //on isole le titre
/* Le titre commence par ,<br /> puis contient n'importe quelle chaîne,<br /> et se termine par */
echo $regs[1]; // on retourne la premiere occurrence trouvée
// Les occurrences se trouvent entre parenthèses
// $regs[0] renvoie toute la chaîne
fclose($fp);

?>
Les fonctions ereg_replace() et eregi_replace()

La fonction ereg_replace() dont la signature est la suivante :

chaîne ereg_replace(chaîne modele,chaîne remplacement,chaîne texte)

Permet de retourner la chaîne texte passée en arguments avec les occurrences
trouvees remplacées par la chaîne de remplacement.

Pour utiliser les occurrences correspondant au modele dans la chaîne de remplacement,
il suffit d'utiliser des parenthèses dans la chaîne modele, puis de faire référence
à ces éléments dans la chaîne de remplacement en utilisant deux signes
antislash suivi d'un numéro identifiant l'élément entre 0 et 9 (les numéros sont
donnés par ordre d'imbriquement, puis de gauche à droite, le zéro représente la chaîne entière).

Le code suivant remplace Toto par Toti Toto... inutile mais formateur.





$Texte = "Bienvenue a Toto dans le mondes des expressions régulières";

$Texte = ereg_replace("To(to)","\\1ti \\0",$Texte);


Le code suivant (utilisation avancée des expressions régulières) remplace
un URL par un hypertexte HTML (il remplace toute suite de caractères
de ponctuations et alphanumériques commençant par http://, ou ftp://

par le même texte (sans le http://) entre balises HTML hypertexte...) :




$Texte = "Bienvenue sur http://www.commentcamarche.net cher ami";

$Texte = ereg_replace("(http://)((:punct:|:alnum:)*)",
"\\2",$Texte);



La fonction eregi_replace() dont la signature est la suivante :

chaîne eregi_replace(chaîne modele,chaîne remplacement,chaîne texte)

effectue le même travail que sa consoeur ereg_replace(), à la différence
près qu'elle n'est pas sensible à la casse (pas de différenciation
minuscules/majuscules).

La fonction split()

La fonction split() possède la syntaxe suivante :


tableau split (chaîne expression, chaîne texte [, entier limite])

La fonction split() retourne un tableau à partir d'une chaîne et d'une expression régulière. La limite, optionnelle permet de limiter la taille du tableau retourné. Dans ce cas le dernier élément du tableau contient le reste de la chaîne.
Si une erreur se produit, split retourne 0.


La fonction sql_regcase()

La fonction sql_regcase() possède la syntaxe suivante :


chaîne sql_regcase (chaîne texte)

Elle retourne une expression régulière qui représente la chaîne passée en paramètre sans tenir compte de la case.
Chaque caractère de la chaîne est representé entre crochets, avec deux caractères à l'intérieur un en majuscule et l'autre en minuscule, ou le cas échéant deux fois le même caractères.
Aucune explication ne vaut un bon exemple ;)



Cette fonction permet de générer une chaîne non sensible à la casse, pour les expressions régulières dans les bases de données par exemple. Dans MySQL lorsque vous utilisez la fonction REGEXP (au lieu de LIKE) la recherche est sensible à la casse. La solution est donc de générer une chaîne non sensible à la casse à l'aide de sql_regcase.

:\"";

// selectionne tous les enregistrements de la table table, contenant le MOT motclef
?>
Pour une lecture illimitée hors ligne, vous avez la possibilité de télécharger gratuitement cet article au format PDF :

Php-expressions-regulieres .pdf
Précédent 11 12 13 14 15 16 17 18 19 20 Suivant
Réalisé sous la direction de Jean-François PILLOU, fondateur de CommentCaMarche.net.





Yamaha lance MusicCast
Découvrez comment contrôler votre installation audio depuis une application intuitive, rapide et simple.
Annonces Google
Actes naissance en ligne
Chercher dans nos actes de naissance. Essai gratuit !
myheritage.com/Naissance
Test de Personnalité
Découvrez l'Animal qui correspond à votre caractère : Testez-vous !
tests-moi.com/Quel-Animal
A voir également

Les expressions régulières
Expression regulière aucun caratère
Expression régulière limiter le nombre de caractères
PHP + regular expression » Forum - PHP
[PHP] Une expression régulière » Forum - PHP
[PHP]Les expressions régulières » Forum - PHP
[PHP]Expression régulière & condition if (Résolu) » Forum - PHP
[php] expressions régulières (Résolu) » Forum - PHP




Aucun commentaire:

Enregistrer un commentaire