Regular Expressions

postat acum 2 ani de Stefanescu Mihai in categorie PHP

Regular expressions sau regex-uri, nu sunt altceva decat tipdare de caractere si ajuta la gasirea unui anumit tipar intr-un sir de caractere.

Folosind un regex puteti cauta un anumit tipar intr-un sir de caractere, puteti inlocui un anumit string cu altul sau il puteti imparti in mai multe siruri de caractere.

PHP ofera dous eturi de functii specifice regular expression:

  • POSIX Regular Expressions
  • PERL Style Regular Expressions

POSIX Regular Expressions:

Structura POSIX este similara cu expresiile aritmetice: elemente(operator) ce sunt combinate pentru a da o expresie complexa.

Paranteze

Parentezele patrate ([]) au un inteles pecial cand sunt folosite in regex-uri. Sunt folosite pentru a gasi un caracter dintr-un anumit interval.

Expresie Descriere
[0-9] Cauta orice numar intre 0 si 9.
[a-z] Cauta orice litera intre a si z (lowercase)
[A-Z] Cauta orice litera intre a si z (uppercase)
[a-Z] Cauta orice litera intre a si Z

Intervalele afisate mai sus sunt generale. Puteti folosi intervale proprii (ex: [0-3] sau [b-v], etc).

Cuantificare:

Frecventa sau pozitia specificata in paranteze patrate poate fi denotata cu un caracter specific.

Expresie Descriere
p+ Orice string ce contine cel putin un p
p* Orice string ce contine 0 sau mai multi p
p? Orice string ce contine 0 sau mai multip. Alternativa p*
p{N} Orice string ce contine o secventa N litere p
p{2, 3} Orice string ce contine o secventa de 2 sau 3 p-uri
p{2, } Orice string ce contine o secventa de 2 sau mai multe p-uri
p$ Orice string cu p la sfarsit
^p Orice string cu p la inceput

Exemple

Expresie Descriere
[^a-zA-Z] Orice expresie ce contine orice caracter din intervalele a – z si A – Z.
p.p Orice expresie ce contine un p, urmat de orice caracter, iar apoi urmat iar de un p.
^.{2}$ Orice string de exact 2 caractere.
(.*) orice string pus intre tag-urile
p(hp)* Orice string ce contine un p urmat de zero sau mai mutle instante ale secventei hp

Intervale Predefinite

Pentru a va usura munca, exista cateva intervale predefinite.

Expresie Descriere
[[:alpha:]] Orice string din intervalul aA-zZ
[[:digit:]] Orice string ce contine numere intre 0 si 9
[[:alnum:]] Orice string ce contine caractere in intervalele aA-zZ si 0-9
[[:space:]] Orice string ce contine spatiu alb.

Functii Regexp PHP POSIX

PHP ofera 7 functii pentru regex=uri folosind stilul POSIX

Functie Descriere
ereg() Functia ereg() cauta un anumit string dupa un tipar definit (regex) si returneaza true daca il gaseste, false in caz contrar.
ereg_replace() Functia ereg_replace() cauta un anuumit string conform unui tipar definit si il inlocuieste cu un string dat.
eregi() Functia eregi() cauta un string conform unui anumit tipar (cautarea nu este case sensitive).
eregi_replace() Functia eregi_replace() functioneaza exact ca si ereg_replace(),doar ca nu este case sensitive.
split() Functia split() imparte un string in mai multe elemente.
spliti() Similar cu split() doar ca nu este  case sensitive.
 sql_regcase() Functia sql_regcase() returneaza expresii in paranteze patrate (cu cate 2 caractere) cu caracterele convertite. (ex: Php 5.0 va returna [Pp] [Hh] [Pp] [  ] [55] [..] [00])

PERL Style

PERL este similar cu POSIX si sintaxa este interschimbabila, de fapt puteti folosi tot ce am aratat mai sus si in regex-urile PERL Style.

Hai sa va explic cateva concepte folosite in regex-urile PERL.

Metacaractere

Un metacaracter este un simplu caracter cu un backslash inainte avand un inteles special.

De exemplu puteti cauta sume de bani folosind metacaracterul ‘\d’ in urmatorul mod /([\d]+)000/, In cazul asta\d cauta orice incepe cu un numar.

Mai jos am scris o lista de metacaractere folosite in regex-urile PERL Style

Caracter Descriere
. Un singur caracter.
\s Un caracter spatiu (spatiu alb, tab, rand nou).
\S Un caracter diferit de un spatiu.
\d Un numar (intre 0-9)
\D Un caracter ce nu este numar.
\w Un caracter din intervalele a-z, A-Z, 0-9 si _
\W Un caracter ce nu face parte din intervalele a-z, A-Z, 0-9 si _
[aeiou] Un caracter ce face parte din cele date.
 [^aeiou] Un caracter ce nu face parte din cele date.
 (foo|bar|baz) Cauta oricare dintre alternativele date.

Modificatori

Sunt valabili mai multi modificatori ce te pot ajuta sa gasesti un anumit string mai usor.

Modificator Descriere
i Face cautarea case insensitive
m Specifica daca un string are o linie noua, iar daca are, caracterele ^ si $ va lua in considerare noua linie.
o Evalueaza expresia o singura data.
s Permite folosirea .cautarea unu carater de tip linie noua.
x  Permite folosirea spatiilor albe in expresie, pentru claritate.
g  Gaseste toate potrivirile la nivel global.
cg  Permite continuarea cautarii chair si dupa ce cautarea globala nu da rezultate.

Functii regexp PERL Style

Functie Descriere
preg_match() Aceasta functie cauta un string si returneaza true daca il gaseste, altfel returneaza false.
preg_match_all() Returneaza numarul de cate ori a gasit un anumit string.
preg_replace() Functioneaza exact ca si ereg_replace(), cauta un pattern si il inlocuieste.
preg_split() Functioneaza exact ca si split(), imparte un string in mai multe elemente.
preg_grep() Cauta in toate elementele unui array si returneza toate elementele gasite.
preg_quote() Pune un backslash in fata fiecarui caracter ce s-ar putea gasi intr-un regex

 

Sunt un tanar programator din Bucuresti ce lucreaza in PHP/Mysql (MySqli/PDO), Laravel, CodeIgniter, MySQL, PostgreSQL, Wordpress, HTML5/CSS3, Sass, Photoshop si multe altele.
Google+ Community Facebook Group
Acest articol a fost mutat de pe vechea platforma.
Pentru orice eroare aparuta la mutare va rog sa ma contactati!