Général

Les PCRE

Les POSIX

Pratique

Linux

Spécial php

Les billets de fred

Les Symboles dans les Expressions Régulières



Nous allons dans cette partie vous donner et vous expliquer les différents symboles utilisés dans les expressions régulières.

Une des premières choses à réaliser dans la conception d'une expression régulière, c'est de définir le motif (pattern en anglais)

Pour construire ces motifs, vous avez besoin de créer une structure formée de caractères littéraux, puis de symboles qui sont définis en tant que métacaractères et délimiteurs et qui seront utilisés séparément ou en combinaison à l'intérieur d'un même groupement ou d'une classe.

Oups, me direz-vous... je suis déjà largué là !
Aucune inquiétude, on va développer le sujet.

1) Les caractères littéraux : On appelle littéral une valeur qui est écrite exactement comme elle est interprétée.
Exemple :

Littéraux Signification

a correspond à la lettre "a" et rien d'autre
chat correspond au mot "chat" et rien d'autre
toto correspond au mot "toto" et rien d'autre


Vous constatez que les littéraux permettent une identification exacte et précise du motif recherché. L'intérêt des expressions régulières ne serait pas bien grand si elles étaient limitées à cette seule possibilité. De plus, pour une recherche simplifiée, une fonction comme strpos() le fera bien plus rapidement qu'un simple preg_match(). Il existe heureusement des symboles spécifiques qui ont un sens plus général et que nous présentons dans la suite de ce cours.

2) Les symboles de début et fin de chaîne et le point .

L'accent circonflexe ^ et le symbole dollar $ et enfin le point .

Symbole Description

^ Indique le début de la chaîne - exemple ^chat
reconnaît une ligne qui commence par chat
$ Indique la fin de la chaîne - exemple : chat$
reconnaît une ligne qui finit par chat
. Le point indique n'importe quel caractère

Ces symboles sont des métacaractères : >>> cf -> Qu'est ce qu'un métacaractère ?

3) Les symboles quantificateurs

Ils sont au nombre de trois :
le point d'interrogation (?), l'étoile (*) et le plus (+)

Symbole Description

* Indique 0, 1 ou plusieurs occurrences du caractère ou de la classe précédente
+ Indique une ou plusieurs occurrences du caractère ou de la classe précédente
? Indique 0 ou une occurrence du caractère ou de la classe précédente

Ces symboles sont des métacaractères : >>> cf -> Qu'est ce qu'un métacaractère ?

Bof... oui... mais encore ?
On va travailler avec des exemples, c'est le but du jeu et, selon l'adage, un petit dessin vont mieux qu'un long discours.

Exemple :
a* correspond à aucune ou plusieurs occurrences de la lettre (a)
soit pas de a, ou a, aa, aaa, aaaa, etc...
a+ correspond à une ou plusieurs occurrences de la lettre (a)
soit au moins un a ou aa, aaa, aaaa, etc...
a? correspond à 0 ou une seule occurrence de la lettre (a)
soit a ou pas de a

4) Les intervalles de reconnaissance

Ce sont les accolades { }

Exemple Signification

a{3} correspond exactement à aaa
a{2,} correspond à un minimum de deux a consécutifs
soit aa, aaa, aaaaa....
a{2,4} correspond uniquement à aa, aaa, aaaa

Ces symboles sont des métacaractères : >>> cf -> Qu'est ce qu'un métacaractère ?

5) Les classes de caractères

Délimitées grâce aux crochets [ ]

Exemple Signification

[..-..] Le tiret représente l'intervalle à l'intérieur de la classe
Il s'agit d'un métacaractère s'il est placé dans cette position. Pour permettre sa lecture en tant que caractère "tiret" il convient de le placer en début de la classe comme ceci [-....]
br[iu]n ce qui signifie, trouver br suivi de i ou de u suivi de n comme brun ou brin
exemple de recherche sur une balise de titre <h1> <h2> <h3>,

 etc...


Ces symboles sont des métacaractères : >>> cf -> Qu'est ce qu'un métacaractère ?

6) Les classes pré-définies

Classe Signification

[[:alpha:]] n'importe quelle lettre
[[:digit:]] n'importe quel chiffre
[[:xdigit:]] caractères héxadé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

7) L'alternative, l'intervalle et la classe complémentée

Réalisé avec la barre | et le tiret - et l'accent circonflexe ^ à l'intérieur des crochets [ ]
La barre verticale | peut également être positionnée entre des parenthèses dans la recherche du motif (voir * dans le tableau exemple)
Exemple :

Exemple Signification

\<h[1-6]\>
intervalle de recherche de 1 à 6 - affichera les balises de titre <h1> <h2> etc...

 

[0-9] tous les chiffres de 0 à 9, etc...

p(ai|i)n la barre verticale détermine une alternative
ce qui signifie tout ce qui s'écrit pain ou pin
L'alternative dans le motif lui-même
^(De|A):@ détermine une alternative dans le motif
ce qui signifie tout ce qui commence par De:@ ou A:@

La classe complémentée
[^1] classe complémentée ce qui signifie reconnaître tout sauf ce qui est énuméré, ici, tout sauf le chiffre 1
[^1-6] classe complémentée ce qui signifie reconnaître tout sauf ce qui est énuméré, ici, tout sauf les chiffres de 1 à 6

Ces symboles sont des métacaractères : >>> cf -> Qu'est ce qu'un métacaractère ?

Tableau récapitulatif

. le 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 positionne le début de la chaîne, la ligne...

$ dollar marque la fin d'une chaîne, 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


Et voilà, mon petit... un solide morceau d'avalé !

J'espère juste que votre digestion se fera correctement, maintenant !

N'hésitez surtout pas à revenir sur cette page de manière répétitive, c'est en effet la meilleure manière d'assimiler les symboles et les actions de ceux-ci.
ADAM Benjamin 2008 | Admin