10
Pour lesdébutonts Exp ressi ons rég uIières Les expressions régulières sont des outils puissonts demonipulotion dechoînes de coroctères. Elles permettent de vérifier lo présence d.e.çnotifs dons une choîne, d'extroire des portions detexte et d'en remplocer des.porties. Une fois que vous ourez compris le principe et oppris à vous en servir en PHP, vous pourrez les utiliser à tous les niveoux de I'orchitecture d'une opplicotion web. Cet orticle explique : . Commentcréer une expression régulière, . Comment rechercherlo présence d'un motif dons une choîne de coroctères, . Commentextroire des portions de texte et rem- plocerdes portiesd'un texte. Ce qu'il fout sovoir: . Vous devez connoître les boses du longoge PHP. s'effectue caractère par caractère, de la gauche vers la droite à partir du premier caractère de la chaîne. La première correspondance trouvée se- ra donc celle qui se situe le plus à gauche dans la chaîne. Dans I'exemple précédent, I'expression régulière jour reconnaît la sous-chaîne " jour" du mot "Bonjour". L'utilisation d'expressions régulières pour rechercher un texte littéral n'est cependant pas très intéressante et il existe des fonctions PHP spécifiques plus efficaces pour ce type de recherche [la section intitulée Utiliser les expressions régtlieres à bon escient présente ces fonctions). Représenter un coroctère quelconque Le caractère spécial point représente un carac- tère quelconque dans la chaîne. Il peut s'agir d'une lettre, d'un chiffre, d'un élément de ponctuation, etc. Une expression comportant des caractères littéraux et un caractère point définit un ensemble fini de chaînes de carac- tères. Par exemple, I'expression régulière . our permet de représenter I'ensemble des chaînes composées d'un caractère quelconque suivi des caractères littéraux "our". Cette expres- sion reconnaîtra par exemple les mots "pour" et "jour". La présence du caractère quelcon- que est obligatoire, le mot "our" ne sera pas reconnu par I'expression. Nous supposons dans cette partie que les chaînes de caractères ne comportent qu'une seule ligne. Le comportement du caractère spê cial point dans les chaînes de caractères compo- sées de plusieurs lignes sera présenté au début de la section Utilisation auancée. Closses de coroctères Dans le formulaire de I'exemple, le champ con- tenant le numéro de téléphone doit compor- ter dix chiffres sans caractères d'espacement, par exemple "0491000000". Les caractères littéraux de 0 à 9 ne peuvent pâs être utilisés tels quels dans I'expression régulière car cela Niveou de difficulté es expressions régulières, ou rationnelles, décrivent un ensemble de chaînes de ca- ractères. Elles définissent des règles de vérification, de recherche et de substitution de sous-chaînes. Ces expressions sont utiliséesdans lesapplications web notamment pour vérifier et manipuler lesdonnées issues de formulaires [ex- traction et remplacementde sous-chaînes). En JavaScript elles vous permettront de vérifier la conformité des donnéessaisies dans un formu- laire avant sonenvoipar le navigateur. Du côté du serveur, vous les utiliserez dans vos scripts PHP pour contrôler la validité des donnéesreçues et pour effectuer des traitements sur ces données (extraction et mise en forme d'informations). Vous pourrez également lesutiliser dansMySQL pour effectuerdesrecherches avancées. Deux types d'expressions régulières peuvent être utilisés en PHP, les expressions régulières standards (POSIX), et les expressions régu- lières PCRE (Perl,Compatible Regular Expres- sions). Nous avonschoisi de vous présenter les expressions PCREcar elles sont plus puissantes et plus rapides. De plus, étant disponibles dans JavaScript, les expressions régulières PCREécri- tes dans vos scripts PHP pour vérifier les don- néespourront être également utilisées dans les scriptsJavaScript afin de vérifier lesformulaires avantleur envoi. Nous vous présenteronsde manière pro- gressive la syntaxe des expressions régulières sur desexemples simples. Une fois lesbases ac- quises, vous apprendrez à utiliser lesfonctions PHP avec ces expressions afin de vérifier si une chaîne de caractères est valide, de séparer une chaîne selon un motif, d'extraireet de rempla- cer des sous-chaînes. Nous prendrons comme exemple un formulaire d'inscription (voir la Figure l) afin d'illustrer la vérification et la recherche de données.Nous vous préciserons ensuiteles cas dans lesquels I'utilisationd'une expressionrégulière n'est pas efficace. Enfin nous présenterons desnotions avancées d'utili- sation et I'utilisation des expressions régulières en JavaScript et MySQL. Syntoxe des expressions régulières Une expression régulière permet de représenter un ensemble de chaînes de caractères. L'expres- sion peut être composée de caractères littéraux et de caractères spéciaux. Coroctères littéroux Il est possible avec une expression régulière de rechercher si une chaîne de caractères est incluse dans une autre chaîne, par exemple le mot jour danslachaîne"Bonjour, encore un lour de ptuie". L'expression régulière jour est compo- séedans ce cas d'une suite de caractères littéraux, c'est à dire de caractères qui n'ont aucune signifi- cation spéciale pour le moteur d'expressions rê gulières 0ettres de I'alphabet, chiffres,...). La recherche de correspondance entre une expression régulière et une chaîne de caractères 12 3 ut ln sl2007

expressions régulières

Embed Size (px)

DESCRIPTION

PHP SOLUTIONS

Citation preview

Page 1: expressions régulières

Pour les débutonts

Exp ressi o ns rég u I i è res

Les expressions régulières sont des outils puissonts de monipulotion de choînesde coroctères. Elles permettent de vérifier lo présence d.e.çnotifs dons une choîne,d'extroire des portions de texte et d'en remplocer des.porties. Une fois que vousourez compris le principe et oppris à vous en servir en PHP, vous pourrez lesutiliser à tous les niveoux de I'orchitecture d'une opplicotion web.

Cet ort icle expl ique :. Comment créer une expression régul ière,. Comment rechercher lo présence d 'un mot i f

dons une choîne de coroctères,. Comment extro i re des port ions de texte et rem-

plocer des port ies d 'un texte.

Ce qu' i l fout sovoi r :. Vous devez connoît re les boses du longoge

PHP.

s'effectue caractère par caractère, de la gauche

vers la droite à partir du premier caractère de la

chaîne. La première correspondance trouvée se-

ra donc celle qui se situe le plus à gauche dans la

chaîne. Dans I'exemple précédent, I'expression

régulière jour reconnaît la sous-chaîne " jour"

du mot "Bon jou r " .

L'utilisation d'expressions régulières pour

rechercher un texte littéral n'est cependant

pas très intéressante et il existe des fonctions

PHP spécifiques plus efficaces pour ce type

de recherche [la section intitulée Utiliser les

expressions régtlieres à bon escient présente ces

fonctions).

Représenter un coroctère quelconque

Le caractère spécial point représente un carac-

tère quelconque dans la chaîne. Il peut s'agir

d'une lettre, d'un chiffre, d'un élément de

ponctuation, etc. Une expression comportant

des caractères littéraux et un caractère point

définit un ensemble fini de chaînes de carac-

tères. Par exemple, I'expression régulière . our

permet de représenter I'ensemble des chaînes

composées d'un caractère quelconque suivi

des caractères littéraux "our". Cette expres-

sion reconnaîtra par exemple les mots "pour"

et "jour". La présence du caractère quelcon-

que est obligatoire, le mot "our" ne sera pas

reconnu par I 'expression.

Nous supposons dans cette partie que les

chaînes de caractères ne comportent qu'une

seule ligne. Le comportement du caractère spê

cial point dans les chaînes de caractères compo-

sées de plusieurs lignes sera présenté au début

de la section Utilisation auancée.

Closses de coroctères

Dans le formulaire de I'exemple, le champ con-

tenant le numéro de téléphone doit compor-

ter dix chiffres sans caractères d'espacement,

par exemple "0491000000". Les caractères

littéraux de 0 à 9 ne peuvent pâs être utilisés

tels quels dans I'expression régulière car cela

Niveou de difficulté

es expressions régulières, ou rationnelles,

décrivent un ensemble de chaînes de ca-

ractères. Elles définissent des règles de

vérification, de recherche et de substitution de

sous-chaînes. Ces expressions sont utilisées dans

les applications web notamment pour vérifier et

manipuler les données issues de formulaires [ex-traction et remplacement de sous-chaînes). En

JavaScript elles vous permettront de vérifier la

conformité des données saisies dans un formu-

laire avant son envoi par le navigateur. Du côté du

serveur, vous les utiliserez dans vos scripts PHP

pour contrôler la validité des données reçues et

pour effectuer des traitements sur ces données(extraction et mise en forme d'informations).

Vous pourrez également les utiliser dans MySQL

pour effectuer des recherches avancées.

Deux types d'expressions régulières peuvent

être utilisés en PHP, les expressions régulières

standards (POSIX), et les expressions régu-

lières PCRE (Perl,Compatible Regular Expres-

sions). Nous avons choisi de vous présenter les

expressions PCRE car elles sont plus puissantes

et plus rapides. De plus, étant disponibles dans

JavaScript, les expressions régulières PCRE écri-

tes dans vos scripts PHP pour vérifier les don-

nées pourront être également utilisées dans les

scripts JavaScript afin de vérifier les formulaires

avant leur envoi.

Nous vous présenterons de manière pro-

gressive la syntaxe des expressions régulières

sur des exemples simples. Une fois les bases ac-

quises, vous apprendrez à utiliser les fonctions

PHP avec ces expressions afin de vérifier si une

chaîne de caractères est valide, de séparer une

chaîne selon un motif, d'extraire et de rempla-

cer des sous-chaînes. Nous prendrons comme

exemple un formulaire d'inscription (voir la

Figure l) afin d'illustrer la vérification et la

recherche de données. Nous vous préciserons

ensuite les cas dans lesquels I'utilisation d'une

expression régulière n'est pas efficace. Enfin

nous présenterons des notions avancées d'utili-

sation et I'utilisation des expressions régulières

en JavaScript et MySQL.

Syntoxe des express ions régul ièresUne expression régulière permet de représenter

un ensemble de chaînes de caractères. L'expres-

sion peut être composée de caractères littéraux

et de caractères spéciaux.

Coroctères l i t téroux

Il est possible avec une expression régulière de

rechercher si une chaîne de caractères est incluse

dans une autre chaîne, par exemple le mot jour

dans lacha îne"Bon jou r , encore un lou r de

ptuie". L'expression régulière jour est compo-

sée dans ce cas d'une suite de caractères littéraux,

c'est à dire de caractères qui n'ont aucune signifi-

cation spéciale pour le moteur d'expressions rê

gulières 0ettres de I'alphabet, chiffres,...).

La recherche de correspondance entre une

expression régulière et une chaîne de caractères

1 2

3

utln

sl2007

Page 2: expressions régulières

restreindrait I'expression à une recherche litté-rale d'un numéro de téléphone unique. Vousavezvu que le caractère point représente un ca-ractère quelconque. L'expression . .pourrait être utilisée pour indiquer une re-cherche de dix chiffres, mais celle-ci n'indi-que pas que les dix caractères doivent être deschiffres. Une telle expression reconnaîtraitun numéro de téléphone mais aussi la chaîne

"xxxxxxxxxx". Les classes de caractères per-mettent de préciser dans quel ensemble de ca-ractères la correspondance doit être cherchée

[Tableau l).Une classe de caractères est un ensemble fini

de caractères. Le caractère point dont nous ve-nons de parler représente à lui seul I'ensemblede tous les caractères, c'est la plus grande classede caractères disponible. Il est possible d'utiliserdes classes prédéfinies (chiffres, mots, ...) ou dedéfinir ses propres classes.

La séquence spéciale \a (decimal digit) re-présente I'ensemble des chiffres. Le caractère \permet de différencier le caractère littéral d dela classe de caractères. Dans une expression régulière, ta indique que le caractère doit être unchiffre quelconque. Ainsi, dans le formulaired'inscription, le champ numéro de téléphonepeut être vérifié par I'expression régulière \d\d\d\d\d\d\d\d\d\d. Cette expression recon-naît toutes les chaînes composées de dix chiÊfres (n'importe lesquels).

D'autres classes permettent de recherchercertains caractères spécifiques dans une chaî-ne. La classe \s représente tous les caractèresd'espacement (saut de ligne, retour chariot,saut de page et tabulation). La classe de ca-ractères l* (word) est utile pour représenterdes mots informatique, celle-ci comporteI'ensemble des lettres de I'alphabet, les chif-fres et le caractère souligné _. En fonction despréférences de localisation, la classe inclutégalement les lettres accentuées. Par exem-ple, si I ' instruct iorr setlocal-e (LC_ALL, ' fr_

FR. iso88591 ' ) , . es t p lacée dans le scr ip t , ousi la localisation a ce réglage par défaut, alorsles accents de l'Europe de I'Ouest pour les let-tres en minuscules et majuscules seront com-pris dans la classe \w.

Utilisées avec la lettre majuscule, ces clas-ses représentent leurs contraires : to signifietout caractère saufun chiffre, \s tout caractè-re sauf un espace, \w représente tout caractèrequi ne fait pas partie de I'ensemble des mots.

Il est possible de definir ses propres classes decaractères dans une expression en utilisant lanotation I t. La liste des caractères de la classeest placée entre crochets. Par exemple Iaeiouy]permet de définir la classe des voyelles. Pour re-présenter la classe des lettres minuscules de I'al-phabet vous pouvez énumérer chaque lettre ouutiliser le caractère - qui permet de définir unintervalle. Ainsi ta-21 représente la classe deslettres de I'alphabet en minuscules. Il est possi-ble de placer plusieurs intervalles dans la classe.

www.phpsolmog.org

L'expression régulière [a-zA-zo-9] se lira : tou-te lettre de I'alphabet (minuscule ou majuscule)ou tout chiffre.

Les classes \d, \w et \s que vous avez vuesprécédemment sont des abréviations de classes.Pour représenter un chiffre il est possible d'uti-liser \a ou son équivalent t o-9 I .

Il est parfois plus simple de lister ce que I'on neveut pas plutôt que de fournir la liste de ce quiest autorisé. Le complémentaire d'un ensemblede caractères est obtenu en plaçant un accent cir-conflexe derrière le crochet ouvrant de la classede caractères. Si par exemple on recherche toutcaractère dans une chaîne sauf des chiffres, il suÊfit d'interdire la classe de caractères des chiffres

avec I'expression régulière t^o-s I . Si I'accent cir-conflexe est situé ailleurs qu'en début de classe, ilne représente plus le complément mais le carac-tère littéral accent circonflexe.

Dans PHP les expressions régulières PCREsupportent également les classes POSX (f o""r,upper, alpha, diglt, ...). Ces classes s'écriventdans les crochets de classe de caractères. Ellessont représentées elles-mêmes entre crochets, etleur nom est suivi et précédé du caractère :. Parexemple la classe de caractères POSIX lower re-présente les lettres de I'alphabet en minuscules.L'expression régulière [ [ : lower: I 1 + appliquéeà la chaîne de caractèreS "Bonjour", trouvera lacorrespondance " on j our".

Figure 1. Formuloi re d ' inscr ipt ion

Figure 2. Formuloi re d ' inscr ipt ion erroné

Page 3: expressions régulières

Pour les débutonts -

l nd i co teu rs d 'occu r rence

Reprenons I'exemple du numéro de télépho-

ne du fbrmulaire. Vous âvez vu que I'expres-

s ion régu l i è re \d \d \d \d \d \d \d \d \d \d recon-

naî t des numéros composés de dix chi f f res.

Plutôt que d 'écr i re d ix fo is \a, i l est possib le

dc préciser le nombre d 'occurrences souhai-

tées en plaçant ce nombre entre accolades.

L 'cxpression régul ière \d t 1o ) rcconnaît les

mêmes numéros de té léphonc que I 'cxpres-

sion précédente.

l - ' i nd i ca teu rd 'occu r rences { } pe rmet

d' indiqucr un nombre cxact d ' t - rccurrcnces

ainsi que le nombrc minimum cVou maxt-

mum d'occurrences (Tablcau Z). Cet indi-

catcur ou quant i f icateur est touj t lurs p lacé

après le caractère l i t téral quant i f ié (ou la

c lassc de ca rac tè res ) . A ins i \ d {n } i nd iquera

que le nombre doit comporter n chiffres con-

sécut i fs (aucun autre caractère n 'est admis

cntre les chi f f res) , \d{n, I s igni f icra que le

nombre doi t ôtre const i tué d 'au mct ins n chi f -

fres et \ d { n, m } représcntera ttlus les nombres

composés au moins de n chi f f rcs et au plus de

rn chiffrcs.

Des abréviations sont définies pour les oc-

currenccs lcs plus fréqr.rcntcs. Lc quantificâtcur

z indique que le caractère est optionncl, c'est

l 'équivalent dc {0, r } . l , ' indicatcur d ' t tccurrcn-

ce + pcut être util isé lorsque le caractère doit

apparaître au moins une fois, sans limite maxi-

male, c'est l 'équivalent du quantificateur { 1, } .

Enfin, * permet d'indiquer que le caractère doit

être présent z.éro, une ou plusieurs fois, sans

préciser le nombre d'occurrences maximal, i l

permet de rcmplacer io, ) .

I l est possible d'appliquer un quantificateur

à plus d'un élément en util isant dcs parenthè-

ses. La quantification porte alors sur la sous-

expression entre parenthèses. Par exemple,

I ' exp ress ion regu l i è re ( \d {2 ) \ s ) {4 } reconna î t

les chaînes de caractères comportant quatre

groupes dc dcux chifÏres suivis par un caractère

d'espacement. Cette expression reconnaîtra la

sous -cha îne "04 91 22 33 " dans la cha îne "oq

9 1 2 2 3 3 4 4 " .

[ ,es indicateurs d 'occurrence sont d i ts g lou-

tons (voir plus loin L|ti l isation auancée). l ls

reconnaissent le nombrc maximal de carac-

tères possib le. t -a correspondancc est dans

un premicr temps réal iséc jusqu'à la f in dc la

chaînc de caractèrcs, puis des caractères sont

rest i tués s i nécessaire af in dc sat is fa i re la f in

de I 'cxpression régul ière. Par exemple, I 'ex-

pression régul ière <b>. *</b> reconnaît ra la

s t - l us -cha îne <b> j ou r< /b> de <b>p lu ie< , /b>

dans la cha îne dc ca rac tè res un <b> j ou r< /b>

d e < b > p l u i e < / b > ! ! !

Coroctère d 'échoppement

Le fbrmulaire d'inscription accepte des numé-

ros de téléphone au format international. Ces

numéros sont préfixés par lc code du pays, par

cxcmple +33497223344 pour la France. l , 'ex-

pression régulière qui reconnaît ces numéros

doit donc indiquer que la chaîne comporte un

caractère' + suivi dc onze chifÏres (lcs deux pre-

miers chiffres étant le codc du pays). Vous avcz

vu que les expressions régulières comportent

un certain nombre de caractèrcs qui tlnt unc

signification particulière. Le caractère + en fait

partie, c'est un quantificateur. Il ne peut donc

pas être util isé littéralement dans la chaîne.

Afin d'lndiquer que le + n'est pas spécial dans

le cas qui nous intéresse, il faut le faire précéder

par le caractère d'échappement \. L'expression

régulière reconnaissant le téléphone au format

internat ional est donc \+\d { 11}.

l,es caractères spéciaux à I'extérieur des clas-

s e s d e c a r a c t è r e s s o n t + ? * ^ $ t l O { } l

ainsi que le caractèrc d'echappement lui-mêlne.

Dans les classcs de caractères, lcs seuls caractè-

res spéciaux sont ceux qui ont une signification

pour la classe (marquc de fin de classc, caractère

d'intervallc). [,es caractères contenus dans unc

classe de caractères sont util isés de manière lit-

térale. Par excmple 1'expression t r I recherchera

un point d'interrogation.

Cor respondonces dons lo cho îne

Toutes les exprcssions régulièrcs que nous

avons préscntées jusqu'à présent rect lnnais-

sent des sc'lus-chaîncs à partir de n'importe

quel caractèrc de la chaîne. Par exemple

\d {10 } reconna î t l e numéro de té léphone

" 0 4 g r 2 2 3 3 4 q " d a n s l a c h a î n e " t é l é p h o n e :

o A s r 2 2 3 3 4 q " . l ) a n s l e c a d r c d e l a v é r i f i c a t i o n

dcs formularres i lest important d 'obtcnir une

correspondance tota le de I 'cxpression dans la

chaînc. Le numéro sats i dans le fbrmulai re

doi t respecter lc format st r ic temcnt. I l ne doi t

pas être précédé ou suiv i par d 'autres caractè-

res. I l cx iste des caractères spéciaux, appelés

ancres, qui nc représentent pas un caractère

mais déterminent la posi t ion de la correspon-

dance d 'une expression régul ièrc ou d 'une

sous-cxpression dans unc chaîne de caractè-

res (Tableau 3) . Certa ins caractères spéciaux

ancrent l 'expression régul ière recherchee cn

début ou en fln dc chaîne (voir ésalemcnt L/ti-

l iscttion auunr'ée).

Le numéro de téléphonc du forrnulaire doit

comporter dix chiffres. [,e caractère spécial "

permet d'intcrdire au moteur d'expresstons

régulières de che rchcr une cttrrespondance

débutant ail leurs que sur le premicr caractère.

L 'expression régul ière ^\d{ro } indique une

correspondance à partir du premicr caractère

de la chaîne analysée. Si lc premier caractèrc de

la chaîne n'est pas un chiffre, la corrcspondance

échoue immediatement, le moteur d'exprcs-

sions régulières ne cherchera pas de corrcspon-

dance à partir du deuxième caractère. Seules les

chaînes débutant par dix chiffres seront recon-

nues par I 'expression.

Il est possible d'ancrer I 'expression régulière

à la fin de la chaîne de caractères à analyser avec

I 'ancre $. L 'expression régul ière \d{10}s indi-

que que la fin de la chaine de caractères doit

être terminée par dix chiffres.

Ces ancres sont t rès ut i l isées pour tester

les valeurs entrées dans les formulai res. La

combinaison des deux ancres fourni t I 'ex-

pression ^ \d { 1o } $ qui reconnaît ra les chaî-

nes contenant uniquement d ix chi f f res quel-

conques.

L is t ing 1 . ver i f .php - Fonc t ions de vér i f i co t ion

' :php

s e t l o c a l e ( L C A L L ' ' f r F R ' i s o 8 8 5 9 1 ' ) ;

func t ion isNom ($cha iner i

$ e x p = ' / ^ \ w + ( \ s + \ w + ) * $ / ' ;

r e t u r n p r e g m a t c h ( $ e x p , $ c h a i n e ) , '

func t ion isDate { $date)

$ e x P = ' 3 ^

( ( o ? t 1 - e l ) | ( t 1 2 l \ d ) | ( 3 t o l l ) ) /

( ( o ? t r - e l ) | ( 1 t o 1 2 l ) ) /

( 1 9 1 2 0 ) \ d { 2 i

$ G x ' ' '

re tu rn p reg_match { $exP, $date) ;

func t ion isTe l ($ te ] )

$ e x p = ' 7 " , ( \ + 3 3 ) | # + 3 3 o u

( \ ( \ + 3 3 \ ) ) l # ( + 3 3 ) o u

0 # 0

) \ d { 9 } # s u i v i d e 9 c h j . f f r e s

5 / x ' ;

re tu rn p reg_match ($exp, $ te I i ;

f j o u r

f m o i s

f a n n e e

sl2007

Page 4: expressions régulières

Deux âncres de limites de mot sont disponi-bles \r et son contraire \e. Elles permettent dedelimiter des mots dans une chaîne de carac-tères. Par exemple, dans la chaîne , ,Bonlour,

encore un jou r de p lu ie " , I ' exp ress ion régu_l ière t r l ou. indique que c 'est le mot , , j our, , quidoit être cherché, c'est-à-dire la sous-chaîne jourprécédée par un caractère qui est une limite demot (espace par exemple). A I' inverse I'expres-slon \B j our précise que jour est une sous-chaîned'un autre mot. La correspondance n,est trou-vée que si le caractère qui précède lei n est pasune limite de mot. Cette expression reconnaitla sous-chaîne " jour" du mot , ,Boniour, , .

Al ternot ive

Le caractère t indique I'alternative dans une ex-pression regulière. L'expression régulière que I qur-signifie que I'on recherche soit le premier terme deI'alternative que, soit le second terme qui. L'ordredonné dans I'alternative ne modifie pas le résultatde la correspondance. Si le premierterme n'est pastrouvé, le moteur vérifie le second, puis les autress'ily a lieu. Prenons pour exemple la citation survan te : "L 'expér ience , ce n 'es t pas ce qu ia r r l v e â q u e l q u ' u n , c ' e s t c e q u e q u e l q u ' u n

fa i t avec ce qu i fu i a r r i ve . " . L 'express ion

régulière eue lqui appliquee à cette chaîne trouve

une correspondance avec le "qui,,, situé avant le

verbe "a r r i ve" .

Coroc tè res non impr imob les

Les caractères non imprimables de mise en pa-ge, saut de ligne, retour chariot, saut de page ettabulation sont représentés respectivement parles séquences \n, \r, \f et \r (Tâbleau 4).

Les caractères de contrôle quant à eux com-mencent par \c et sont suivis par un caractère.Par exemple, \ cx représente conr rof -x.

V c r ; f i i : r ' l r - r v < : i i { J i t E .

ri t r n ç: q ; I I r : r r I n *J ç* c-l r.r r"ffi {.r t {:i r+-r rtLes expressions régulières sont très utilisées pourcontrôler la vahdite des données issues d'un for-mulaire d'un site web. Elles permettent de vérifierle format d'un numéro de téléphone, d'un email,...et également de détecter les données qui pour-raient porter atteinte à la sécurité du site.

Cho is i r un dé l im i teu r

d 'expressions régul ières

La fonction PHP preg_march permet de vérifiersi une chaîne de caractères suit un modèle don-né. Elle prend en arguments I'expression régu-lière et la chaîne à analyser et retourne 1 en casde correspondance, o sinon.

L 'expression régul ière passée en paramè-tre est composée d 'un mot i f encadré pardeux dél imi teurs ident iques, par exemplele caractère / . L 'expresslon peut comporteraprès le dél imi teur de f in une ou plusieursop t ions (Tâb leau 5 ) : /mo t i r /op r ions . Le dé -l imi teur peut être pr is parmi n ' importe quelcaractère autre que les caractères spéciaux

www phpsolmog.org

présentés dans la sect ion précedcnte. C'estgénéralement les caractères / ou + qui sontu t i l i ses pour dc l im i te r I ' exp ress ion régu l i e re .Par exemple, I 'expression val idant un chi f f repeu t ê t re éc r i t e / \ d / ou # \d# .

Rendre I ' exp ress ion insens ib le à l o cosseIl est possible de rendre I'expression régulièreinsensible à la casse en ajoutant l,option i en find'expression. Ceci permet d'éviter de précisertoutes les possibil ités majuscules / minusculesdans I'expression elle-même. Par exemple, I 'ex-presslon / [a-z] +,/i reconnaîtra tous les motscomposés de lettres de I'alphabet en maiusculesou minuscules.

Ajouter des

commento i res dons I ' exp ress ion

Les expressions régulières complexes peu-vent être rendues plus lisibles en ajoutant descommentaires et des caractères d'espacement.L'option x permet d'indiquer au moteur d'ex-pressions regulières qu'il doit ignorer les espacesdans I'expression ainsi que le texte commenté.

Tobleou 1. Closses de coroctères

I 1

[ " ]

t - l\ ;

Un coroctère quelconque

Tout coroctère de lo l iste contenue entre crochets

Tout souf un coroctère de lo l is te contenue entre crochets

Intervol le

Tous les chi f f res: [0 9]

Tout souf un chiffre

Tous les mots ( let t res, chi f f res ou coroctère _) : lo-zA-20-9_l

Tout souf un mot

Coroctères d 'espocement

Tout souf un coroctère d'espocement

Les commentaires commencent par un caractè-re # et se terminent à la fln de la l igne courante.

L'expression régulière qui reconnaît un nu_méro de téléphone s'écrit sans I'option x :

/ ^ ( ( \ + 3 3 ) | ( \ ( \ + 3 3 \ ) ) t O ) \ d { e } $ /En util isant I 'option x, i l est possible de I'aé_

rer et d'ajouter des commentaires facilitant soninterprétation :

/ " ( ( \ + 3 3 ) I # + 3 3 o u( \ ( \ + 3 3 \ ) ) | # ( + 3 3 ) o u

0 # 0

) \ d { 9 } # s u i v i d e 9 c h i f f r e s

) / x

Exemp le de vé r i f i co t i on

de chomps de fo rmu lo i re

L'exemple présenté dans cet article est une vé-rif ication de données d'un formulaire d'inscrrption avec des expressions regulières (Figure Z).Le script PHP du Listing 2 réalise I'affichagedu formulaire, sa vérification ainsi que le trai-tement des données si celles-ci sont valides. Lafbnction de traitement des données a eté laissée

\ , .

\D

\W

\s

\S

+

?

{n}

{n , }

Tobleou 2. I ndicoteurs d 'occurrence

{n,m}

Zéro, une ou plusieurs occurrences

Au moins une occurrence

Opt ionne l

Exoctement n occurrences

Au moins n occurrences

Au moins n occurrences et ou plus m occurrences

Tob leou 3 . Pos i t i on de lo co r respondonce dcns lo cho îne

^ Correspondonce en début de choîne ou de l igne (mode mul t i - l ignes)

$ correspondonce en fin de choîne ou de ligne (mode multi-l ignes)

\b L imi te de mot

\B Pos une limite de mot

\A Correspondonce en début de choîne ( indépendont du mode mui t i - l ignes)

\Z Correspondonce en fin de choîne (indépendont du mode multi-l ignes) -,;t j*mffï

Page 5: expressions régulières

vide dans l'exemple car nous ne nous intéres-

sons dans le cadre de cet article qu'à l'analyse

des données reçues. Nous ne décrirons pas le

code du listing formul-aire.php qui est chargé

de réaliser I'affichage du formulaire et d'appeler

les fonctions de vérification. Ce script inclut le

script veri f .pnp (Listing I ) déclarant les fonc-

tions de vérification des champs de formulaire.

La vérification fait appel à trois fonctions, cha-

cune utilise une expression régulière.

La fonction isNom vérifie que la chaîne pas-

sée en paramètre suit le motif ^\w+ (\s+\w+) *$.

Cette expression assez simpliste autorise un ou

plusieurs mots séparés par des espaces. Les mots

peuvent contenir des lettres, chiffres ou carac-

tères soulignés ainsi que des accents car nous

avons indiqué la localisation avec setlocare. Si

la chaîne est reconnue par le motif la fonction

retourne 1, o sinon.La fonction isDate vérifie que la chaîne reçue

en paramètre suit le format de date voulu. C'est-

àdire i)/nm/aaaa. Le jour et le mois peuvent

être donnés sur un ou deux caractères s'ils sont

inférieurs à dix. Nous avons utilise c plutôt que

,/ comme délimiteur pour éviter d'avoir à protê

ger le caractère / présent dans le format de date.

Nous aurions pu utiliser une expression plus

simple permettant de vérifier rapidement que le

format général est suivi ̂ \d t 2 ) / \d { 2 } / \d { 4 } $.Mais une expression de ce type laisse passer un

grand nombre de dates incorrectes, comme par

exemple oo/gg/2222. Nous avons choisi d'écrire

une expression un peu plus évoluée permettant

d'indiquer que le jour est un nombre compris

entre 01 et gr (le 0 étant optionnel), le mois est

compris entre 01 et rz (o optionnel) et I'année

fait partie du vingtième ou du vingt<t-unième

siède. Cette expression laisse passer des dates

incorrectes comme le tt/oz/zoo7, mais elle est

bien plus restrictive que I'expression précédente.

La fonction PHP checkdate pourrait être utili-

sée pour vérifier la validité de la date.

( ( 0 ? t 1 - 9 1 ) | ( t 1 2 1 \ d ) | ( 3 t 0 1 1 ) ) / # j o u r

( ( 0 ? t 1 - 9 1 ) | ( 1 t 0 1 2 1 ) ) / # m o i s( 1 9 1 2 0 ) \ d { 2 ) # a n n e e

) L d x

La fonction isrel vérifie que le numéro de télé-

phone saisi suit bien le format voulu. I-.lexpres-

sion autorise les numéros au format internatio-

nal parenthesé ou non, ainsi que les numéros

sans préfixe de pays (caractère 0 suivi de neuf

chiffres). Les numéros ci-après sont équivalents

et reconnus par la fonction ; "(+33) 491223344",,' +3349L223344 " et " 0491223344".

Découper une choînede coroctèresDes fonctions PHP dédiées à la manipulation

de chaînes de caractères (voir la section Utiliser

Ies expressions régulières à bon escient) permettent

de découper une chaîne en fonction d'un sépara-

teur. Ce séparateur peut être un caractère unique

ou une suite de caractères. Avec les expressions

régulières il est possible de séparer les éléments

d'une chaîne à partir d'un motif complexe. [,a

fonction preg_split applique une expression rê

gulière pour découper une chaîne de caractères.

Son premier argument est I'expression régulière

à appliquer à la chaîne. [,e deuxième argument

est le texte à découper. [,a fonction retourne

les souschaînes dans un tableau. Le motif qui a

permis d'effectuer la séparation n'est pas présent

dans les souschaînes retournées.

L'expression régulière [ . ! ?] \s+ de I'exemple

ci-après permet d'obtenir les phrases d'un texte.

Elle effectue la séparation lorsqu'un caractère

de fin de phrase est suivi d'un caractère d'es-

pacement. Dans cet exemple, le tableau $tab-phrases retourné par la fonction preg-split

comporte deux éléments. Le premier est la chaî-

ne de carac tères "J 'a f f ron tera i ma peur "

et le second la chaîne ".re lui permettrai

d e p a s s e r s u r m o i , a u t r a v e r s d e m o i " .

Comme nous I'avons précisé plus haut,le motif

utilisé pour la découpe n'est pas inclus dans les

sous-chaînes, les phrases obtenues ne compor-

tent pas le caractère de ponctuation final ainsi

que les espaces qui le suivent.

$ c i t a t i o n = " J ' a f f r o n t e r a i m a p e u r . J e l u i

permet t ra i de passer sur mo i , au

t r a v e r s d e m o i . " ;

$ e x p = ' / l . l ? ) \ s + / ' , '

$ tab_phrases = preg_sp l i t ($exp, $c i ta t ion) ;

Obtenir les correspondqncesde I 'expression dons lo choîneDes fonctions permettent d'obtenir la ou les

correspondances de I'expression régulière dans

la chaîne de caractères et d'extraire des parties

de ces correspondances.

Obtenir une correspondonceVous avez vu dans la section sur la vérification

de la validité d'une chaîne de caractères que la

fonction preg-match prend en paramètres I'ex-

pression à rechercher et la chaîne à analyser et

retourne la valeur 1 en cas de correspondance

ou o sinon. Cette fonction permet également,

lorsqu'on lui fournit un tableau en troisième

argument, d'obtenir les correspondances d'une

expression régulière dans une chaîne de caractè

res. Les correspondances trouvées sont placées

dans le tableau.Supposons que I'on souhaite extraire le prê

nom d'une chaîne comportant un prénom et

un nom séparés par un caractère d'espacement.

L'expression ̂ \w+\s permet d'indiquer que

nous recherchons la partie comprise entre le

premier caractère de la chaîne $nom et le pre

mier caractère d'espacement (inclus). La fonc-

tion preg_match trouve une correspondance

et la stocke dans la première case du tableau.

Le prénom devient accessible dans le code PHP

avec $matches [0 ] .

$ e x P = I / ^ \ w + \ s / r ;

$ n o m = ' M a g a l i C o n t e n s i n ' , '

preg_match($exp, $nom, $matches) i

Tobleou 4. Coroctères non impr imobles

\t Tobulotion

\r Retour choriot

\cx Coroctère de contrôle : control-x

U Inverse I'ovidité des quontificoteurs (non PCRE)

Tqbleou 6. Groupement et mémorisotion

Mémorise lo choîne reconnue por lo sous-expression entre porenthèses

Tobleou 5. Opt ions oppl icobles oux expressions régul ières

Rend I'expression régulière insensible à lo cosse

Mode single line : le coroctère \n est. reconnu por le coroctère .

Permet d'ossocier une clé pour occéder à lo choîne reconnue por,lo sous-expression

Référence lo sous-expression numéro idons I'expression régulière

5/2007

Page 6: expressions régulières

Obtenir lo toto l i té des correspondonces

La fonction preg-match ne récupère que la

première correspondance dc I'exprcssion re-

gul ière dans la chaîne de caractères analysée.

Pour obtenir I 'ensemble dcs corrcspondan-

ces dans la chaîne il fàut uti l iser la fbnction

preg_match -a r r . Cc l l c -e i p rcnd l cs mômes

arguments que la fbnct ion preg-match. Si par

exemple on rechcrche le caractère a dans gnom,

I' instruction suivante :

p r e g m a t c h a I I ( " / a / " , 5 n o m , $ m a t c h e s ) ;

a f f e c t e r a d a n s l a c a s c $ m a t c h e s [ 0 ] l e t a -

b leau des cor respondances t rouvées dans le

p r é n o m . I c i i l s ' a g i r a d ' u n t a b l e a u d e d e u x

c a s e s c o n t e n a n t l e s d e u x " a " d u p r é n o m

" M a o a 1 i ' l

Obten i r I es co r respondonces

ovec les sous-expressions

[.es parenthèses 1 ) dans une exprcssion régulière

permcttent dc capturer les parties de la chaine qui

sont reconnues paï la sous-cxpresstt-rn parenthesée.

Ceci permet, par exemple, de mémoriser séparé

ment le code international et le numéro de télépht>

ne provcnant de notre formulaire. l,'exprcssion ^ t\

+33) (\d{ 9} )$ comportedeuxst-nts-expressic'lns. Ia

première mémorise le codc, la seconde capture les

neuf dcrniers chiffres du numero.

$ e x p : ' 7 " 1 \ + 3 3 ) ( \ d { 9 } ) $ / ' ;

Snumero : ' , +33491223344 ' ;

p r e g m a t c h ( $ e x p , $ n u m e r o , $ m a t c h e s ) ;

[ -a première case du tableau, Smatches Io]

conticnt l 'enscmble de la chaîne'trouvée, soit

si le numéro est valide le numéro dans sttn in-

tegral i té. La seconde case $matches [1] stocke

la sous-chaîne "+33" reconnue par la première

sous-expression entre parenthèses. La troisiè-

me case gmatches t2 l s tocke le contenu de la

seconde parenthèse (les 9 chiffres composant

lc numértr de tc lephone).

Comme il a été dit précédemment, les pa-

rcnthèses peuvent être utilisées pour appliquer

un quantificatcur à un ensemble de caractères,

classes ou groupement de caractères. La mémo-

risation dans le tableau gmatches n'étant pas

fbrcément voulue, i l est possible d'uti l iser les

parenthèses pour a1-tpliquer un quantificateur

srlr une sous-partie de I'expression régulièrc

sans pour autant mémoriser le contenu de la

parenthèse. Il suffit dc fàire précéder le contenu

dc la parenthèse par la marque z: . Par exemple

l i s t i ng 2 . fo rmu lo i re php

I D O C T Y P E h t M I P U B L I C " - / / W 3 C / / D T D X H T M L 1 . 0 S t T i C t / / E N ' '

" h t t p : / / w w w . w 3 . o r g l T R / x h t m l 1 / D T D / x h t m l 1 - s t r l c t . d l d "

h tml :

h e a d '

' t i t l e , I n s c r i p t i o n ' , t i t 1 e . '

, l i n k r e l = " s t y l e s h e e t f o r m ' c s s "

., head '

. b o d y ,

. h 1 , C t u b d u r a n d o n n e u r - F o r m u l a i r e d ' i n s c r i p t i o n h 1

' , p h p

r e q u i r e I ' v e r j - f . p h p ' I ;

f u n c t i o n i n s c r i r e ( $ n o m , $ p r e n o m , $ d a t e , $ t e 1 )

/ / fonc t ion qu i inscr i t une personne

e c h o ' ' : p i n s c r i p t i o n e n r e g i s t r e e ' : ' p : ' ' , " \ n " ;

func t ion recupVar iab leForm($namel i

i f i i s s e t { S P O S T ; $ n a m e i ) ) 1

r e t u r n s t r i p t a g s ( $ _ P O S T $ n a m e ) ;

re tu rn ' ' ;

func t ion c reerChampSaj .s ie t$ in t i tu le , $name, $va lue i

e c h o " . t r > \ n \ t . t d ' " , $ i n t i t u I e , " . : , ' t d ' \ n \ t . , t d ) " ;

e C h o ' . . i n p u t t y p e : " t e X t " n a m e = " ' , $ n a m e , I r l

v a f u e = " ' , $ v a l u e , I t t i . > | ;

e c h o " . . i t d ) ' \ n , . : t r : - ' \ n " ;

f u n c t i o n a f f i c h e r F o r m ( $ n o m = " , $ p r e n o m = " , $ d a t e = ' I '

q l - ô l = r r l

e c h o " - d i v ; ' \ n " ;

e c h o ' . : f o r m a c t i o n = " f o r m u l a i r e . p h p "

m e t h o d = ' , p o S 1 " : , ' , , ' \ n " ;

e c h o " . : . t a b l e ) ' \ n " ;

c r e e r C h a m p S a i s i e ( ' N o m ' , ' n o m ' , $ n o m l ' '

c r e e r C h a m p S a i s i e , ' P r e n o m ' ,

' p r e n o m ' , $ p r e n o m , ;

c r e e r C h a m p S a i s i e t ' D a t e d e n a i s s a n c e ' , ' d a t e ' ,

$ d a l e ) ;

c r e e r C h a m p S a i s i e { ' T e I . ' , ' t e 1 ' , $ t e 1 ) ;

e c h o " . t r \ n \ t t d c o l s p a n = t 2 t i l '

e c h o ' . r i n p u t t y p e = " s u b m i t " n a m e = " a c t i o n "

v a l u e = " I n s c r i p t i o n " , ' . ' ' , '

e c h o " . . "

t d > \ n < , / t r > \ n . . : ' t a b l e > \ n ' : . . f o r m > \ n ' : . ' d i v ' ' \ n " ;

f u n c t i o n v e r i f i e r i S n o m , $ p r e n o m , $ d a t e , 9 t e 1 )

$champs faux = ar ray l ;

1 t ! r s N o m ) n o m I

$ c h a m p s f a u x = ' n o m ' ;

i f t I i511o* i$prenom) 1

$ c h a m p s f a u x = ' P r e n o m ' ;

i f , ! i s D a t e 9 d a t e

( n h r m n c f e r r w = t d a t e ' ;

i f r ! i s r e l ( $ t e l ) ) ,

$ c h a m p s _ f a u x = ' t e l e p h o n e ' ;

raa , r rn i rnp lode { ' , ' , $champs- faux t ;

/ / s i des donnees on t e te recues

i f { i s s e t i $ P O S T i r a c t i o n r l ) ) a

/ / recuperer Les donnees

$nom = recupVar iab leFormi Inom' ) ;

$ p r e n o m = r e c u p V a r i a b l e F o r m ( ' p r e n o m ' ) ;

$ d a t e = r e c u p V a r i a b l e F o r m ( ' d a t e ' ) ;

$ t e I = r e c u p V a r i a b l e F o r m i ' t e f i ;

/ / veri f ier fes donnes

S e r r e u r s = v e r i f i e r ( $ n o m , $ p r e n o m , $ d a t e , $ t e l l ;

/ / s i donnees cor rec tes fes t ra i te r

i f i e m p t y ( $ e r r e u r s ) ) r

,

i n s c r i r e i $ n o m , $ p r e n o m , $ d a t e , $ t e l r ;

/ / s inon a f f i cher fe fa rnu la i re

e lse ;

a f f i cherForm(Snom, $prenom, $date , $ te1 ; ;

echo ' . lp . ;cor r igez : ' , $er reurs , " . . . , ' p > \n" ;

I

, e l s e i

aff icherForm (l , '

, - - 'body

html : '

www.phpso lmog.org

Page 7: expressions régulières

Pour les débutonts

si la fonction preg_match reçoit en argument

I ' e x p r e s s i o n / ^ ( ? : \ + 3 3 ) ( \ d { 9 } ) S / , a l o r s l e

code international +33 ne sera pâs capturé et

le numéro de téléphone sera stocké dans la case

$ m a t c h e s [ 1 ] .

Vous venez de voir que I'accès au con-

tenu des parenthèses est réalisé en donnant

le numéro de la parenthèse capturante dans

le tableau $matches. Il est également possi-

ble d'accéder au contenu en utilisant les clés

dans le tableau associatif smatches. La no

tation (?p<nom>) permet d'indiquer la clé

donnant accès au contenu de la parenthèse.

Le tableau obtenu comportera une case avec

accès par indice par parenthèse capturante

plus les cases avec accès par clé. La fonction

p reg_match lorsqu'elle reçoit I'expression régu-

l ière suivante /^ (?P<code internat ional>\

+ 3 3 ) ( ? P < t e l e p h o n e > \ d { 9 } l S / , g é n è r e u n

tableau de cinq cases. La case dont I'indice

est o contient la correspondance globale.

L'accès au contenu capturé par la première

parenthèse est réalisé avec Smatches[1] ou

$matches [ ' code in te rna t iona l ' ] e t ce lu i

de la deuxième parenthèse avec $matches [2]

ou Smatches [ ' t e lephone ' ] .

Remplocer des sous-choînesLes fonctions de manipulation de chaînes de

caractères standards [voir la section Utiliser les

expressions régulières à bon escient) permettent deremplacer un ou plusieurs caractères littéraux

dans une chaîne. Avec une fonction de rempla-

cement basée sur les expressions régulières il estpossible d'effectuer les substitutions de toutesles parties d'une chaîne qui sont reconnues par

un motif.La fonction preg_replace recherche les cor-

respondances d'une expression régulière dans

une chaîne de caractères et les remplace par une

chaîne composée de caractères littéraux et éven-

tuellement de références aux contenus mémorisés par I'expression. Cette fonction prend enargument, dans I'ordre, I'expression régulière, la

chaîne de remplacement et la chaîne à traiter. Lafonction retourne une chaîne de caractères, ellene modifie pas la chaîne dans laquelle les corres-pondances ont été recherchées.

Prenons I'exemple du numéro de téléphonefrançais. Il peut être saisi dans le formulaire

d'inscription au format international avec ousans parenthèses ou directement sans indiquer

le préfixe de pays (caractère o suivi de neuf

chiffres). Les numéros ci-après sont équivalentset acceptés par le script de traitement de I'ins-

cript ion : " (+33:r 491223344", "+334 91223344"

et "0491223344". Afin d'uniformiser les nu-

méros de téléphone des membres du club, un

traitement peut être réalisé avant d'enregistrerles données. Par exemple, vous pouvez déciderde remplacer les parties (+33) ou +33, lors-qu'elles sont présentes, par un caractère o demanière à ce que tous les téléphones suivent le

format composé uniquement de dix chiffres (le

premier chiffre étant le caractère o). La fonc-

tion preg_replace ci-après effectue ce traite

ment. Elle retourne dans cet exemple la chaîne

" 049L223344" .

$ t e 1

$exp

$ t e 1

= ' 1 + 3 3 ) 4 9 L 2 2 3 3 4 4 ' ;= ' / ^ ( \ + 3 3 ) | \ ( \ + 3 3 \ ) / ' ;

f o rmate = p reg rep lace ($exp , ' 0 ,

$ t e l ) ;

La chaîne de remplacement peut faire réfé-

rence aux contenus capturés par les sous-ex-pressions. La séquence \\1 (qui peut égale-ment s'écrire sr) fait référence au contenu mé-

morisé par la première parenthèse de I'expres-

sion régulière. Dans I'exemple du formulaireles dates sont saisies au format 1j/mm/aaaa.Vous pouvez transformer la date afin de l'écri-

re dans le format de date de MySQL avec la

fonction preg _ replace. IJexpression réguliè-re ̂ ( \ d t2 ) ) / ( \ d {2 } ) / ( \ d {4 } ) $ cap tu re l es pa r -

ties jour, mois et année de la date. Le caractè-

re # est utilisé comme délimiteur à la place du

délimiteur / pour éviter de devoir protéger les

caractères / apparaissant dans la date. La chaî-ne de remplacement réorganise les donnéescapturées pour produire une date au formataaaa-mm-jj. Pour la date $date, la fonction re-

tournera la chaîne '2oo'7-oi-2r'.

$ d a t e = " 2 I / 0 1 / 2 0 0 1 " ;

$ e x p = ' # " ( \ d { 2 } ) / ( \ d { 2 i ) / ( \ d { 4 } ) $ # ' ;

$date_mysq l = p reg_rep lace ($exp,

' \ \ 3 - \ \ 2 - \ \ 1

" $ d a r e ) ;

Uti l iser les expressionsrégulières à bon escientVous savez à présent créer des expressions régu-lières et les utiliser pour rechercher la présence

de motifs dans du texte, découper des chaînesde caractères, extraire des sous-chaînes et effec-tuer des remplacements. Les expressions régu-lières sont des outils puissants de manipulationde chaînes de caractères. Elles permettent deréaliser des opérations que les fonctions de ma-nipulation de chaînes classiques de PHP ne peu-

vent pas effectuer. Cette puissance a un cotft entermes d'utilisation mémoire et de temps d'exêcution. Il est donc important de les utiliser à bonescient, c'est-àdire uniquement lorsque vous nepouvez pas obtenir le résultat souhaité avec unefonction ne mettant pas en jeu le moteur d'ex-pressions régulières.

PHP propose un grand nombre de fonc-tions pour effectuer des recherches et véri-fications, extraire des données, séparer deschaînes et supprimer, remplacer ou ajouterdes caractères dans une chaîne sans utiliserd'expressions régulières (Tableau 8). Avantde créer une expression régulière vous de-vez toujours vous demander s'il est possible

d'obtenir le même résultat avec une de cesfonctions. Nous vous invitons à utiliser lesfonctions présentées ci-après à chaque foisque cela vous sera possible.

Fonctions de vérificotionLes données envoyées par le biais de formulai-res sont stockées dans des chaînes de caractères.De nombreuses fonctions PHP peuvent êtreutilisées pour s'assurer que la chaîne contientle type de données attendu. Des fonctions per-

mettent de vérifier qu'une chaîne de caractèresest un nombre entier ou réel (is numeric) ouun entier non signé (ctype_aisit). Les fonc-tions ctype indiquent si tous les caractères dela chaîne appartiennent à une classe donnée.Elles permettent notamment de vérifier qu'une

entrée utilisateur n'est composée que de lettres

de l'alphabet (ctype_a1pha), de minuscules(ctype-tow"t), de majuscules (.typ"-upp"r)

ou encore de caractères alphanumériques (cty-

pe a lnum) .

Fonctions de recherchePour vérifier qu'une sous-chaîne est présente

dans une chaîne de caractères utilisez les fonc-

tions strpos ou stripos. Le nombre d'occur-rences de la sous-chaîne peut être obtenu avec lafonction substr counE..

Fonctions d'extroction de sous-choînesDes fonctions permettent d'extraire une

sous-chaîne à partir d'une position don-née dans la chaîne (substr), de la première

occurrence d'une sous-chaîne dans cette

int preg-motch(string Retourne 1 s'i ly o une correspondonce de exp dons ch, 0 sinon. Lo corres-

exp, string ch, orroy t) pondonce est stockée dons lo cose 0 de t, les coses suivontes contiennent lessous-occurrences mémorisées

string preg-reploce(string exp,string rep, string ch)

Retourne lo choîne ch dons loquelle les sous-choînes qui correspondent à I 'ex-pression exp ont été remplocées por lo choîne rep. Si des sous-occurrencessont définies, elles peuvent être représentées dons rep en util isont \\m,ou $m, m étont le numéro de lo sous-occurrence dons exp

Tobleou 7. Fonct ions PHP pour les expressions régul ières

Page 8: expressions régulières

c h a î n e ( s t r s t r , s t r i s t r ) , o u e n c o r e d e l â

dernière occurrence d 'un caractère dans la

cha îne (s t r r c r r r ) .

Fonc t ions de remp locement

de coroctères

PHP permet de supprimer rapidement tous

les caractères d'espacement de début et de

f in de chaîne ( t . i . , r t r im, l t r im), les carac-

tères \ (st r ipstasrres) et les bal ises HTMI.

(str is tus") . I l permet également de sup-

primer une sous<haîne en utilisant la fonction

str reptace avec une chaîne vide comme ârgu-

ment de remplaccmcnt.

Des fbnctions dédiées à HTMI- permettent

d'ajouter I 'elémcnt <br /> avant chaque passagc

à la l igne (nr2br) et de remplaccr dcs caractères

par des ent i tés HTMI- (htmlspecia lchars,

h t m l e n t i t i e s J .

Plusieurs fbnctions pcuvcnt être util isécs

pour remplacer dcs caractères dans une chai-

ne. La fonction strtr permct dc substituer

toutes les occurrences d'un caractère d'unc

chaîne par un caractère donné. La fonction

substr replace remplacc une sc ' rus-chaîne

à part i r d 'unc posi t i t rn donnéc. La fonct ion

str replace quant à e l lc rcmplace toutes lcs

occurrences d'une sclus-chaîne dans la chaine.

Fonc t ions de découpoge de cho înes

La fonction exptode découpe la chaîne en

fonction d'un séparateur qui pcut être com-

posé d'un ou plusicurs caractères. La fonction

srrrok effectue ellc aussi un découpage mais

à partir d'un caractèrc unique pris dans une

liste. Il est ainsi possible d'obtenir, par exem-

ple, les mots d'une chaîne en fournissant la

chaîne "\n\t " comme séparateur. [-a fonction

str word count retourne tous les mots trouvés

dans la chaîne.

i" i t i I i scti o n $vû n crlr:Nous présentons dans cette partie des notions

avancées. Leur compréhension n'est pas indis-

pensable dans un premier temps. Vous pouvez,

à partir des notions vues précédemment, créer

de nombreuses expressions régulières qui re-

pondront à une grande partie des problèmes

les plus courants de vérification de dorrnées de

formulaires et de manipulation de chaînes de

caractères.

Cho înes compor ton t p lus ieu rs l i gnes

Nous avons travaillé jusqu'à présent avec des

chaînes de caractères ne comportant qu'une

seule ligne. Les expressions régulières peuvent

traiter des chaînes multi-lignes, c'est-à-dire des

chaînes comportant des caractères \n. Nous al-

lons présenter le comportement par défaut du

moteur d'expressions régulières en présence de

telles chaînes, ainsi que les options qui modi-

fient ce comportement.

Vous avez vu dans la section présentant la

syntaxe des expressions régulières que le carac-

www.pnpsormog org

tèrc spécial point est une abréviation pour une

classe de caractères rcconnaissant tout caractè-

re. Ceci est vrai lorsque la chaîne ne comporte

qu'une seule hgne. Par défaut, le caractère point

reconnaît tout caractère sauf \n. Ce comporte-

ment peut être modifié par I 'option r (mode

single line). Avcc cette option le caractère point

rcconnaîtra tous les caractères sans exception.

Dans I'exemple ci-après I'expression réguliere

. + reconnaît la totalite de la chaîne de caractè-

res $ci tat ion car I 'c lpt ion s cst ut i l isée. Sans

cette option preg match trouverait unc corres-

pondance uniquement âvec la partic précédant

le saut de ligne, c'est-à-dirc la sc-rus-chaîne " sans

l a l i b e r t é d e b f â m e r , " .

$ c i t a t i o n : " s a n s l a l i b e r t é d e b l â m e r ,

\ n i l n ' e s t p o i n t d ' e 1 o g e f l a t t e u r " , '

$ e x p = ' / . + / s ' ;

p r e g m a l c h { $ o x p , S c i L a L i o n , S t a b ) ;

Le comportcmcnt des classes de caractèrcs

complémentées n'est pas modifié par la pre-

sence du caractère \n ct n'cst pas affècté par

I 'opt ion s. L 'expressron regul ière [^ ! ]+ rccon-

na î t ra l a to ta l i t é de la cha inc sc i ta t i on Câr

celle-ci nc colnporte aucun caractèrc point

d 'exclamat ion.

Les caractères spéciaux ^ et $, qui indiquent

respectivement une correspondance en début

ct fin de chaîne de caractères, peuvent être uti-

lisés pour rechercher une correspondance en

début et fin de ligne. Ce comportement est ob-

tenu avec I'option * (mode multiJignes). Dans

I'exemple ci-après la chaîne de caractères com-

porte trois l ignes. La fonctron preg match all

trouvera deux correspondances pour I'expres-

sion régulière ^n. + car les deux dernières lignes

colrrmencent par le caractère .'. Sans I'option m,

l'exprcssion regulière chercherait une corres-

pondance en début de chaîne, et non plus en dé-

but de ligne, ce qui conduirait à un échec puis-

que la première ligne de la chaîne commence

par le caractère c.

( n i t : r i n n = t r C o n r r i n o \ n n n r r c i r r ê n â q

\ n n o u s r e n d p l u s f o r t " ;

$ e x p = ' / ^ n . + / m ' ;

p r e g m a t c h a l 1 ( $ e x p , $ c i t a r i o n , S t a b ) ;

En mode mul t i - l ignes, I 'ancre $ indique une

correspondance en f in de chaîne ou avant le

caractère de nouvel le l igne ( le caractère \n

ne sera donc pas présent dans les correspon-

dances). Dans I 'exemple c i -dcssus, s i nous aÊ

fec tons à $e*p I ' exp ress ion régu l i è re n .+g

Tob leou 8 . Fonc t ions de vé r i f i co t i on e t de mon iou lo t i on de cho înes

rs numenc

ctype-digit

c type_olpho

ctype_lower

ctype_upper

ctype_olnum

strpos, st r ipos

substr count

su bstr

strstr, stristr

st r rcnr

trim, ltrim, rtrim

str ips loshes

strip_togs

str- reploce

substr-reploce

strt r

n l2b r

h tm lspec io l -chors

htmlentities

exp lode

strtok

str word count

Vér i f i e s i I ' o rgument es t un nombre ou une cho îne numér ique

Vérifie que lo choîne ne comporte que des chiffres

Vér i f ie que lo choîne ne comporte que des coroctères de l 'o lphobet.

Vérifie que lo choîne ne comporte que des minuscules

Vér i f ie que lo choîne ne comporte que des mojuscules

Vérifie que lo choîne ne comporte que des coroctères olphonumériques

Retourne lo posi t ion de lo première occurrence d 'une sous-choîne

Retourne le nombre d'occurrences de lo sous-choîne

Extroi t une sous-choîne à port i r d 'une posi t ion possée en poromètre

Extroit une sous-choîne à portir de lo position de lo première occurrence d'une séquence

Extroi t une sous-choîne à port i r de lo dernière occurrence d 'un coroctère

Supprime les coroctères d'espocement en début et/ou fin de choîne

Suppr ime les coroctères \

Suppr ime les bol ises HTML

Remploce toutes les occurrences d 'une sous-choîne

Remploce une sous-choîne à portir d'une position donnée

Remploce des coroctères

Insère <br/> devont les coroctères de possoge à lo l igne

Remp loce les co roc tè res " & '< > po r des en t i t és HTML

Remploce les coroctères spécioux, occents, ... por des entités HTML

Découpe une choîne en fonct ion d 'un séporoteur (choîne)

Découpe une choîne en fonction d'un séporoteur(coroctère)

Retourne les mots t rouvés dons lo chqîne

Page 9: expressions régulières

alors la fonction preg - match - al l trou-

vera en mode multi-lignes trois correspon-

d a n c g s : " n e " , " n o u s t u e p a s " € t " n o u s r e n d

p l u s f o r t " .

Il est possible d'indiquer une correspon-

dance uniquement en début ou fin de chaîne

de caractères en utilisant respectivement \eet \2. Ces deux ancres sont indépendantes

du mode multi-lignes. Dans l'exemple pré-

cédent la fonction preg_match-a11 trouvera

trois correspondances (les trois lignes) si elle

reçoit en ârgument /^ .+/m, et une seule cor-

respondance avec I'argument / \4. +/m (la pre-

mière ligne).

Quontificoteurs pqresseux

Lesca rac tè resspéc iaux+ * 2 i n , ) e t { n ,m) eui indiquent le nombre d'occurrence d'un

caractère ou d'une sous-expression sont dits

gloutons ou avides. Ils essaient toujours de re-

connaître le maximum de caractères possible.

Pour illustrer I'avidité prenons I'exemple de

I'extraction du contenu d'un élément HTML

em. Le but est de mémoriser la partie entre la

balise ouvrante <em> et la balise fermante </

em>. Nous supposerons pour simplifier I'ex-

pression que la balise ouvrante ne comporte

pas d'attribut. Si nous utilisons I'expression

<em) ( . * ) <\ /em> alors nous obtiendrons le

résultat souhaité uniquement si la chaîne de

caractères ne comporte qu'une seule occur-

rence de cet élément. Examinons le processus

de recherche de correspondance de I'expres-

sion régulière $exp pour la chaîne de carac-

tères $citation de I'exemple ci-après. Le

moteur d'expressions régulières cherche tout

d'abord le premier caractère de I'expression

régulière dans la chaîne. La recherche de < est

effectuée de la gauche vers la droite à partir

du premier caractère de la chaîne. Une corres-

pondance est trouvée avec le quatrième carac-

tère de la chaîne. Puis le moteur reconnaît les

caractères suivants de I'expression : e, m et ).

L'expression régulière comporte ensuite une

sous-expression (. ") indiquant une recherche

d'un caractère quelconque présent zéro, une

ou plusieurs fois. Cette sous-expression est

appliquée à partir du huitième caractère de

la chaîne. L'avidité entraîne une tentative de

correspondance maximale. C'est-à-dire que

la sous-expression capture tous les caractè-

Tobleou 9. Alternotive, tests et conditions

res jusqu'à la fin de la chaîne. Une fois que le

dernier caractère de la chaîne est atteint, le ca-

ractère . de la suite de l'expression régulière(partie < \ / em>) ne peut plus être trouvé. Afin

d'éviter un échec global, la sous-expression

restitue les caractères un à un de la droite vers

la gauche. À chaque restitution le caractère <

est recherché. Une fois que la sous-chaîne "</em> tranquiJ-re" a été rest i tuée, la dernière

partie de I'expression régulière trouve une

correspondance, ce qui conduit à un succès

global. Le contenu mémorisé par la sous-ex-

pression sera donc la sous-chaîne "rri../"*tn ' e s t p a s u n l o n g < e m ) f l - e u v e " .

$ c i t a t i o n = " L a ( e m ) v i e < / e m > n ' e s t p a s u n

Iong <em>f leuve</em> t ranqu i l le " , '

$ e x p = ' / ( e m ) ( . * ) < \ / e m > / ' ;

p r e g m a t c h ( $ e x p , $ c i t a t i o n , $ t a b l ;

Le comportement des quantificateurs peut

être modifié afin de les rendre à reconnais-

sance minimale. Pour ce faire il suffit d'ajou-

ter un caractère r derrière les indicateurs

d'occurrence. Par exemple x+? signifiera

que I'on cherche le caractère x au moins une

fois mais le moins de fois possible. Repre-

nons I'exemple précédent mais avec une ex-

pression régulière comportânt une sous-ex-

press ion paresseuse <em> ( . *?) < \ /em>. Com-

me précédemment, le moteur d'expres-

sions régulières applique la sous-expression

à partir du huitième caractère de la chaî-

ne $citat ion. La sous-expression étant pa-

resseuse elle ne capture aucun caractère. Le

moteur tente donc d'appliquer la fin de I'ex-

pression à partir du huitième caractère de la

chaîne. Aucune correspondance n'est trou-

vée entre < et le caractère ,r. Afin d'éviter

un échec global la sous-expression est obli-

gée de capturer le caractère v, puis les ca-

ractères i et e. Lorsque le onzième caractè-

re est atteint la dernière partie de I'expres-

sion régulière est trouvée dans la chaîne ce

qui conduit à un succès global. Le contenu

extrait par la sous-expression est dans ce cas

la sous-chaîne vie.

L'exemple pris cidessus était destiné à illus-

trer de manière simple le comportement des

quantificateurs gloutons et paresseux. L'utili-

sation d'une expression régulière comportant

une classe complémentée est plus appropriéepour extraire le contenu d'un élément. Pour

cet exemple, I'expression régulière capturantle contenu de la balis€ em €st la suivante :< e m > ( [ ^ < ] * ) < \ / e m > .

PHP propose également une option u qui

n'est pas compatible PCRE. Cette option inver-

se I'avidité des quantificateurs. Ils deviennentparesseux par défaut et gloutons dans le cas où

un z est ajouté.

Références orrièreLes parenthèses permettent de capturer des

sous-chaînes. Vous avez v! qu'il est possible

d'accéder au contenu mémorisé dans la chaîne

de remplacement de la fonction preg_reprace

avec des références \ \ i ou $ i, i étant le numéro

de la sous-expression entre parenthèses. Il estpossible de faire référence au contenu d'une pa-

renthèse au sein même de I'expression régulière

en utilisant \i. PHP autorise jusqu'à quatre-

vingtdix-neuf références arrières.La référence arrière \r de I'exemple ci-après

permet de rechercher une correspondance avec

un nom d'élément HTML trouvé dans la balise

ouvrante. La première parenthèse mémorise le

nom d'élément. La seconde parenthèse capture

le contenu entre la balise ouvrante et la balise

fermante dont le nom est identique à celui de la

balise ouvrante. Des quantificateurs paresseux

sont utilisés afin d'obtenir une reconnaissance

minimale. L'expression $exp reconnaît la sous-

chaîne "c ie l <b>bas</b> e t rourd" .

$c i ta t ion = "Quand te <em>c ie l <b>bas</b>

et lourd</em> pèse comme un

couverc l -e" ;

$ e x p = ' / < ( . + ? \ > ( . * ? ) < \ / \ 1 > / ' ;

Tests ovont et qrrière

Les tests avant et arrière restreignent les corres-pondances de I'expression. Ils permettent de vê

rifier si la partie à droite (test avant) ou à gauche(test arrière) de la position courante satisfait

une sous-€xpression régulière. Si le test échoue

ceci conduit à un échec global de I'expression

régulière. En cas de succès la correspondance ne

contient pas la partie de la chaîne reconnue par

la sous-expression du test.Le test avant positif ( I =") est vrai si la sous<x-

pression e est vérifiée après la position courante

dans la chaîne. L'expression régulière $exp dans

I'exemple ci-après capture les mots de la chaîne

$citation lorsqu'ils sont suivis par un caractè

re d'espacement suivi du mot qui. La fonctionpreg_match-all trouve les correspondances

"chemin" et "d i f f ic i le" . La sous<haîne qui

n'apparaît pas dans ces correspondances car

les tests avant et arrière ne mémorisent pas le

texte.

$c i ta t i on = "Ce n 'es t pas le chemin qu i

es t d i f f i c i l e , c ' es t l e d i f f i c i l e qu i

e s t ] e c h e m i n " i

I Alternotive

x(?!y) Test ovont négotif

x(?.!y) Test orrière négotif

(?(condition)xly) Si lo condition est vérifiée opplique lo sous-expression x, sinon opplique y

s|2007

Page 10: expressions régulières

Le moteur d'expressions régulières applique

Le test avant négatif l: l"l est vrai si la sous- I 'expression à partir du premier caractère de la

expression e n'est pas vérifiée après la po- chaîne. Si I 'expression échoue à partir de cette

sition courante. Par exemple, I'expression position alors le moteur effectue un décalage.

chemin (? l \squi) qui recherche le mot chemin L 'expression est testée à part i r du deuxième

lorsqu'i l n'est pas suivi par le mot qui, trouvera caractère de la chaîne et ainsi de suite jusqu'à

une correspondance en fin de chaîne. ce qu une correspondance soit trouvée ou que

Les tests arrière positif (?<:e) et négatif la fin de la chaîne soit atteinte. L'uti l isation des

(?<!e)ont lemêmecomportementquelestests ancres de début de chaîne \a et lou de l ignes ̂

avant positif et négatif mais la vérification est ef- évite le décalage de I'expression régulière dans

fectuée à gauche de la position courante. la chaîne de caractères. Ceci permet d'éviter des

véritications.

S e x P = ' / \ w + 1 ? = \ s q u i ) / ' ;

p r e g m a t c h a l l ( $ s x p , S c i t a c i o n , S t a b ) ;

Condi t ions

Une structure conditionnelle équivalente au i r

de PHP peut être utilisée afin d'indiquer qu'une

correspondance avec une sous-expression ré-

gulière e1 ne doit être recherchée que si une

condition est vérifiée. Cette structure s'écrit

(? ( cond i t i on )e11 . La cond i t i on peu t ê t re un

test avant ou arrière ou encore un nombre fai-

sant référence à un numéro de parenthèse.

I1 est également possible d'indiquer les sous-

expressions à utiliser lorsque la condition est

vraie ou fausse (équivalent du ir etse). La

structure conditionnelle s'écrit dans ce cas

(? (cond i t i on )e1 le2 ) . S i l a cond i t i on es t vé r i -

fiée alors la sous-expression e 1 est utilisée, sinon

c'est la sous-expression e2 qui est utilisée.

Prenons I'exemple d'une heure qui peut être

écrite dans une chaîne selon deux formats. Le

premier sépare les heures des minutes en utili-

sant le caractère ' : ' . Le second indique les uni-

tés. Midi et quart pourra être écrit l2: l5 ou l2h

l5mn. L'expression régulière ci-après reconnaît

les deux formats d'heure. Si le test avant ( ?:. * :

) trouve le caractère ' : ' dans la chaîne alors

I ' heu re dev ra su iv re l e fo rmat \d {2 } : \d {2 } .

Sinon, I'heure devra respecter le format avec les

un i tés \d {2 }h \s \d {2 }mn. Pour p lus de c la r té

nous avons ajouté des espacements et des com-

mentaires dans I'expression régulière (l'option *

permet cet ajout).

$ e x p = ' / " ( ? ( ? = . * : ) # i f

\ d t 2 ) : \ d t 2 ) I # t h e n

\ d { 2 } h \ s \ d { 2 } m n # e l s e

\ Ç / x ' ;

Op t im iso t ion

La manière d'écrire une expression régulière

peut avoir un impact sur les performances.

www.pn psormog.org

Nous donnons ci-après quelques indications

pour optimiser les expressions.

Le contenu d'une parenthèse ne devrait être

capturé que s'il est utilisé par la suite. Les pa-

renthèses employées pour le regroupement de-

vraient être non capturantes car la mémorisation

des données consomme de la mémoire vive.

Il est préférable d'utiliser des classes de carac-

tères à la place du caractère point lorsque c'est

possible. L'expression t^ | I + ! sera plus efficace

que I'expression . + I . En effet, le point capture

tous les caractères possibles dans la chaîne avant

d'être forcé de revenir en arrière jusqu'à ce que

le caractère t soit restitué.

Les alternatives sont couteuses en temps

d'exécution. Tànt que la correspondance n'est

pas trouvée tous les termes de I'alternative

doivent être testés. Quand c'est possible il est

souhaitable de les remplacer par des classes de

caractères. Il est plus cfficace d'écrire t o r z I plu-

t ô t q u e ( o t 1 t 2 ) .

Applicotion à JovoScript et MySQLJavaScript supporte un grand sous-ensemble

des expressions PCRE, une même expression

peut donc être utilisée sur le serveur et sur le na-

vigateur pour vérifier des données d'un formu-

laire. JavaScript ne supporte pas les tests arrière,

les conditions, les classes POSX (f o*"., ...), les

correspondances \R et \2, ainsi que les options

s, €t x. La recherche de toutes les correspon-

dances est obtenue avec une option q (global).

L'expression régulière s'écrit /morif ,/oprions.

Le délimiteur est toujours le caractère /. Les

données capturées par les sous-expressions sont

accessibles en utilisant le numéro de la paren-

thèse : indice i- dans le tableau retourné par la

méthode exec recherchant les correspondances,

si dans la chaîne de remplacement (méthode

rept ace), \i dans I'expression elle-même. Dans

I'exemple ci-après la méthode test retourne

iIt -

I

Sur Internet

. http://www.php.net/monuol/fr/ref.pcre.php - Expressions régulières PCRE dons PHP (syntoxe, op-t ions, fonct ions)

. http://www.oreilly.com/cotolog/regexppr/chopter -Téléchorgement grotuit de lo portie PHP du li-vre Regulor Expression, pocket reference - Édi t ions O'Rei l ly

. http://www.pcre.org/pcre.txt - Poges du monuel PCRE (formot texte)

. http;//www.oreil ly.fr - Description du livre Moîtrise des expressions régulières (principe, moteursd'expressions régulières, optimisotion) - Jeffrey E. F. Friedl - éditions O'Reilly.

le booléen rrue, exec retourne un tableau de

quatre cases. Le remplacement fournit la date' r979-O7-21' , .

v a r d a t e = ' 2 1 - 4 1 - I 9 1 9 ' :

v a r e x p = / ^ ( \ d { 2 } ) - ( \ d { 2 } ) - ( \ d { a j l S / ;

a l e r L ( e x p . t e s t ( d a t e ) ) ;

v a r t a b = e x p . e x e c ( d a t e ) , '

v a r d a t e 2 = d a t e . r e p J - a c e ( e x p ,

a J J . a L | |

Ecrire des expressions POSIX est facile quand

on sait uti l iser les expressions PCRE. Une

grande partie de la syntaxe est identique : in-

dicateurs d'occurrence, caractères non impri-

mables, alternative, caractère d'échappement

\, mémorisation ou non des sous-expressions,

définition des classes avec [ ], [^ ] et [ - l. Ces

expressions s'écrivent sans délimiteur et sans

oçtion. Elles ne supportent pas les tests avant

et arrière, les conditions, les références arriè-

re dans I'expression, les quantificateurs pares-

seux, les abréviations de classes \d, \D, rw, r

w, \s et f s (i l faut uti l iser celles POSIX f ower,

upper, ...), les correspondances \A et \2, tn et \

B (u t i l i se r [ [ : < : ] I pou r \b e t t [ : > : ] I pou r \a ) .

Le point reconnaît toujours le \n. Les expres-

sions POSIX peuvent être util isées dans PHP

avec les fonc t ionsereg , e reg r , e reg rep race ,

e reg i _ rep lace , sp l i t e t spJ - i t i . I l es t éga le -

ment possible de les utiliser dans MySQL avec

l'opérateur relationnel REGEXP :

SELECT * FROM randonneur I I IHERE nom REGEXP

' ̂ O d I a e i o u y r ] + $ ' ;

Conc lus ionCet article vous a présenté la syntaxe des expres-

sions régulières et la manipulation de chaînes

de caractères avec ces expressions. Vous sa-

vez à présent créer des expressions régulières

et les utiliser pour vérifier qu'une chaîne suit

un motif pour découper des chaînes de caractè-

res, pour extraire des sous-chaînes et effectuer

des remplacements. Les expressions régulières

permettent de réaliser des opérations que les

fonctions de manipulation de chaînes classiques

de PHP ne peuvent pas effectuer. Vous pouvez

désormais util iser cet outiltrès puissant de ma-

nipulation de chaînes dans vos applications web

pour vérifier et manipuler les données issues de

formulaires.

MAGALI CONTENSIN, CECILE ODEROMogoli Contensin, outeur du livre Boses de données

et lnternet ovec PHP et MySQL, trovoille ou CNRS

et enseigne depuis sept ons le développement d'op-

plicotions Web à l'Université.

Co nto ct : htt p ://m o g o I i.c o nte n s i n. o n I i n e.f r.

Cécile Odero est spéciolisée dons lo conception et le

développement d'opplicotions Web en PH P/MySQL.

Elle trovoille en Angleterre dons lo socrété Fubro.

Co nto ct : ce c i le @f u b re.co m.