Sunteți pe pagina 1din 4

Expresii regulate Regex

Curs Php-mysql

 Invatati sa scrieti si sa utilizati expresii regulate


 Invatati sa verificati sirurile in functie de expresii regulate

1. Scrierea expresiilor regulate (Regex)


Expresiile regulate (regex) sunt un sir de caractere sablon care descriu multimea cuvintelor
posibile care pot fi formate cu acele caractere, respectand anumite reguli. Aceste expresii
regulate folosesc paranteze (rotunde, patrate, acolade) prin care formeaza regulile de formare a
cuvintelor. Utilitatea cea mai frecventa a unei expresii regulate consta în a recunoaste daca un
sir contine sau nu cuvinte sau sub-sir care pot fi formate prin expresia regulata respectiva.

 De ex.: expresia m[ai]r poate forma cuvintele: mar si mir

Sa presupunem ca doriti sa specificati un sir care poate include orice vocala. Puteti face
aceasta folosind expresia regulata [aeiou]. Prin includerea valorilor posibile între paranteze,
formati o expresie regulata echivalenta cu formularea "alege oricare din aceste valori". Daca
doriti sa permiteti si utilizarea, majusculelor, puteti scrie [aeiouAEIOU].
Sa presupunem ca doriti sa specificati un sir care poate include orice caracter scris cu
minuscule. Puteti scrie: [abcdefghijklmnopqrstuvwxyz]. Sau puteti folosi o forma mai
compacta [a-z], unde prin cratima se întelege "o serie de caractere consecutive".
Sa presupunem ca doriti sa specificati intr-o expresie regulata sirurile "sat", "mat" si "lat".
Pentru aceasta, aveti nevoie de expresia regulata [sml]at. Semnificatia acestei expresii regulate
este urmatoarea: "alege oricare din literele 's', 'm' si 'l' si scrie dupa litera respectiva literele
'at'".
Daca un accent circumflex (^) este primul simbol mentionat între parantezele drepte, acesta are
ca efect inversarea semnificatiei expresiei regulate plasate între paranteze.

 De exemplu, expresia regulata [^a-z] corespunde oricarui caracter care nu este o litera
mica.

Pentru a specifica faptul ca o expresie regulata se poate repeta, expresia regulat va fi urmata
de o pereche de acolade, care includ limitele superioara si inferioara ale repetitiei.

 De exemplu, expresia regulata [aeiou]{1,4} corespunde sirurilor care pot contine intre 1 si 4
vocale.

Pentru a specifica repetarea mai multor parti ale unei expresii regulate, includeti partile
respective între paranteze rotunde.

 De exemplu, expresia regulata ([sml]at){1 ,2} corespunde unui numar de una sau doua
repetari ale oricaruia dintre sirurile "sat", "mat" sau "lat".
Pentru a simplifica scrierea de reguli intr-o expresie regulata se folosesc anumite caractere
"speciale"
Sa presupunem ca doriti sa reprezentati o înmultire intre doua numere, puteti obtine ceva de
genul [0-9]*[0-9]. Totusi, aceasta expresie regulata nu are semnificatia dorita, deoarece '*' este
un factor de repetitie, nu un caracter dintr-un sir. Pentru a dezactiva semnificatia speciala a
caracterului '*', trebuie sa-l prefixati cu un caracter backslash: [0-9]\*[0-9].
Pentru a specifica faptul ca o expresie regulata corespunde numai unui sub-sir care include
anumite caractere la inceput, prefixati expresia regulata cu un accent circumflex "^". De
exemplu, expresia regulata ^[sml]at corespunde sub-sirurilor "sat", "mat" sau "lat" numai daca
acestea apar la începutul sirului subiect.
Similar, pentru a arata ca o expresie regulata corespunde numai unui sub-sir care include
anumite caractere la sfarsit, anexati la expresia regulata un simbol al dolarului "$". De exemplu,
expresia regulata [sml]at$ corespunde sirurilor "sat", "mat" sau "lat" numai daca acestea apar la
sfârsitul sirului subiect.
Iata o lista cu mai multe caractere speciale si rolul lor in expresiile regulate:

 ^ - indica inceputul liniei


 $ - indica sfarsitul liniei
 . - (punct) orice caracter
 [] - un caracter dintre cele din paranezele patrate
 [^] - orice caracter, in afara celor din paranezele patrate
 \ - scoate din contextul formari expresiei caracterul care urmeaza
 + - caracterul (expresia) anterior acestui semn se poate repeta odata si de cate ori e posibil
(de la 1 la infinit)
 * - caracterul (expresia) anterior acestui semn se poate repeta de cate ori e posibil sau
niciodate (de la 0 la infinit)
 ? - caracterul (expresia) anterior acestui semn se poate repeta ce mult odata
 <> - un cuvant intreg
 (|) - lista de optiuni SAU
 {m, n} - repetarea expresiei de la "m" la "n" ori

Iata cateva exemple de expresii regulate:

 (.*) - Reprezinta toate caracterele (prin .) repetate de cate ori e posibil (dat de *)
 <salut> - Cuvantul "salut"
 (ci|co)tim - Reprezinta "citim" si "cotim"
 ^The .* hack$ - Sirurile care incep cu "the " si se sfarsesc cu " hack"
 ^www.[a-z0-9]+.ro$ - Reprezinta sirurile "www.---.ro" unde '---' poate fi orice litera sau
cuvant ce contine litere mici si numere
 (^-\+[0-9]*) - Orice numar care incepe cu "-" sau "+"
 ^([a-zA-Z0-9]+[a-zA-Z0-9._%-]*@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4})$ - Expresie
regulata pentru adrese de e-mail

2. Utilizarea expresiilor regulate


PHP include numeroase functii care lucreaza cu expresii regulate. Tabelul urmator descrie
unele din aceste functii.
Functii PHP pentru expresii regulate
Functie Descriere
- Executa o identificare cu o expresie regulata (anulata
ereg
incepand cu versiunea PHP 5.3)
- Înlocuieste un sub-sir care corespunde unei expresii
ereg_replace regulate (anulata incepand cu versiunea PHP 5.3 - in
locul ei poate fi folosita preg_replace)
- Executa o identificare cu o expresie regulata insensibila
eregi la diferenta între majuscule si minuscule (anulata
incepand cu versiunea PHP 5.3)
- Înlocuieste un sub-sir care corespunde unei expresii
regulate insensibile la diferenta între majuscule si
eregi_replace
minuscule (anulata incepand cu versiunea PHP 5.3 - in
locul ei poate fi folosita preg_replace)
- Cauta in sir caracterele sau sablonul care se potriveste
preg_replace cu expresia regulata din functie si o inlocuieste cu alte
valori date
- Divide un sir într-un tablou folosind o expresie regulata
split (anulata incepand cu versiunea PHP 5.3 - in locul ei
poate fi folosita preg_split)
- Creaza o expresie regulata, insensibila la diferenta între
majuscule si minuscule, dintr-un sir care contine o
sql_regcase
expresie regulata (anulata incepand cu versiunea PHP
5.3)
In continuare este dat un exemplu cu functia ereg().
Forma simpla a functiei ereg() preia doua argumente: un sir care contine o expresie regulata si
un sir subiect. Functia returneaza TRUE daca expresia regulata corespunde unui sub-sir al sirului
subiect; în caz contrar, returneaza FALSE.

- Iata un exemplu:
<?php
$model = "[sml]at";
$subiect = "La noi in sat";
$rezultat = ereg($model, $subiect);
if ($rezultat) {
echo 'Model inclus in subiect';
}
?>
- In acest script, variabila $rezultat primeste valoarea TRUE, deoarece sirul 'subiect' contine sub-
sirul "sat", care corespunde expresiei regulate.
Pentru verificare, instructiunea "if" verifica daca "$resultat" este TRUE si in caz afirmativ
executa comanda dintre acolade, "echo" care afiseaza 'Model inclus in subiect'.

- Pentru a verifica daca un sir contine numai litere si numere, puteti folosi direct
functia ctype_alnum()

- Deoarece functiile "ereg" au fost anulate incepand cu versiunea PHP 5.3, este indicat sa nu le
mai folositi, cunoasterea lor e necesara daca le intalniti in scripturi mai vechi. Acestea au fost
inlocuite cu functii "preg_" (Perl-Compatible). Mai multe detalii si exemple despre aceste functii
gasiti in manualul Expresii regulate (compatibile Perl.
Expresiile regulate compatigile Perl se adauga intre caractere "/". De exemplu sablonul ([a-z0-
9]+) se foloseste /([a-z0-9]+)/.

Iata un exemplu cu preg_grep(), aceasta returneaza un array compus din elementele unei matrice
care contin sablonul, expresia regulata cautata. Acest exemplu va returna doar acele elementele
dintr-o matrice care contin in ele sub-sirurile "casa" sau "masa".
<?php
$matrice = array('123casa', 'abc masa', '12-xy', '$asa_0/', '123abc casa');
$filtru = preg_grep("/([cm]asa)/", $matrice);

print_r ($filtru); // Afiseaza elementele matricei


?>
- Variabila "$matrice" contine un Array cu mai multe elemente cu siruri.
- In variabila $filtru e preluat rezultatul functiei "preg_grep()" a carei prim parametru este un
sablon de expresie regulata (adaugata intre ghilimele duble), iar al doilea este matricea in care e
cautat sablonul.
- Cu functia "print_r()" se va afisa elementele matricei obtinute in variabila "$filtru". Rezultatul
afisat e urmatorul:
Array ( [0]=>123casa [1]=>abc masa [4]=>123abc casa )

- Un ultim exemplu util, folosim functia preg_replace() si o expresie regulata pentru a elimina
caracterelor speciale dintr-un sir
<?php
$sir = 'Sir& ce contine*a <caractere: speciale? /in co@nte>xt';
$sir = preg_replace("/([^ A-Za-z0-9_]+)/", "", $sir);
echo $sir;
?>
In acest exemplu avem un sir (stocat in variabila $sir) ce contine diferite caractere mai putin
uzuale.
Functia "preg_replace", impreuna cu expresia regulata "/(^ A-Za-z0-9_]+)/", pastreaza in $sir
numai literele, cifrele, caracterul '_' si spatiu.
Instructiunea "echo" va afisa urmatorul rezultat:
Sir ce continea caractere speciale in context

S-ar putea să vă placă și