Regular Expressions

postat acum 4 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!

Comentariu postate de minecraft pc download la data de 12.05.2019
Awesome blog! Is your theme custom made or did you download it from somewhere? A design like yours with a few simple adjustements would really make my blog jump out. Please let me know where you got your theme. Cheers
Comentariu postate de adidas superstar shoes la data de 14.05.2019
I have to show thanks to you for rescuing me from this instance. Right after browsing through the world wide web and coming across concepts which were not powerful, I was thinking my life was over. Living without the strategies to the problems you have sorted out by means of the blog post is a crucial case, and those that could have in a wrong way affected my entire career if I had not noticed the website. Your good natural talent and kindness in controlling everything was invaluable. I don't know what I would have done if I hadn't discovered such a subject like this. It's possible to at this time look ahead to my future. Thanks very much for your high quality and sensible help. I won't think twice to endorse your web page to any individual who needs and wants direction about this subject matter.
Comentariu postate de download minecraft pc la data de 14.05.2019
Hi there! I know this is kinda off topic but I was wondering which blog platform are you using for this site? I'm getting fed up of Wordpress because I've had issues with hackers and I'm looking at options for another platform. I would be fantastic if you could point me in the direction of a good platform.
Comentariu postate de download minecraft for free la data de 15.05.2019
Sweet blog! I found it while browsing on Yahoo News. Do you have any suggestions on how to get listed in Yahoo News? I've been trying for a while but I never seem to get there! Many thanks
Comentariu postate de how to download minecraft free la data de 17.05.2019
This text is worth everyone's attention. When can I find out more?