Documente Academic
Documente Profesional
Documente Cultură
Curs Php-mysql
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:
(.*) - 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
- 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);
- 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