PHP si expresiile regulate (partea I)

Created at: iulie 8, 2013; Last update: noiembrie 1, 2013

Mereu mi s-a parut o corvoada expresiile regulate (Regex = regular expressions), dar se pare ca asta este rezultatul negasirii unor tutoriale care sa te ia de la zero si apoi sa construiasca pe baza fiecarui nou pas.

Am gasit un tutorial care mi s-a parut foarte util pe TutsforWeb si consider ca ar fi o pierdere daca nu ar exista si o versiune in romana pentru acest tutorial.

Asadar, sa incepem cu inceputul. Ce sunt expresiile regulate? Conform definitiei Wikipedia…

O expresie regulata este o secventa de caractere cu rol de sablon (pattern). Acest sablon se aplica peste un subiect (un sir de caractere) pentru a extrage toate subsirurile care au aceeasi structura cu sablonul definit.

Prin urmare, vorbim de un sablon care, aplicat pe o secventa de text ar trebui sa returneze subsirurile care au structura sablonului:

Incepem cu un exemplu simplu:

Codul va returna 1 deoarece caracterele “in” se regasesc in sirul de caractere $string.

Codul de mai jos va returna 0.

Metacaracterele

Ridicare la putere – ^ (Caret in engleza)

Aflat la inceputul sablonului, ^ reprezinta “inceputul sirului”. Primul echo va returna 1 deoarece cauta in string ca secventa “we” sa se afle la inceputul acestuia.

Metacaracterul ^ are si o alta utilizare, despre care vom vorbi mai incolo.

Dolarul – $

Cauta in string ca la sfarsitul acestuia sa se afle un anumit sablon de caractere:

Caractere posibile – []

Verifica existenta caracterelor aflate intre parantezele patrate in string. Daca mai multe caractere se afla intre paranteze patrate, asta inseamna ca oricare UNUL dintre acele caractere poate sa fie continut in secventa de text in care se face cautarea. Cu alte cuvinte /gr[ea]y/ gaseste in secventa de text fie grey fie gray, dar nu greay sau graey. /gr[ea]t/ nu gaseste in secventa de text cuvantul /great/:

Cratima – –

Cratima, in interiorul parantezelor patrate, este folosita pentru a expune o plaja de caractere. Astfel, cratima reprezinta toate caracterele aflate intre doua caractere. Metacaracterul “-” se aplica doar cand cratima se afla intre []: [0-9][A-Za-z]

Ridicare la putere intre paranteze patrate – [^]

Aflat intre paranteze patrate, inainte de enumerarea de caractere, simbolul ^ este de fapt o negatie: caracterele aflate intre paranteze patrate NU trebuie sa se regaseasca in string-ul de caractere.

Folosirea simbolului $ intre [], nu reprezinta sfarsitul stringului, ci doar simbolul $.

Intre paranteze patrate putem pune si un vector de caractere. Astfel, [a-f] este echivalentul [abcdef].

Punctul – .

Orice caracter singular cu exceptia unei linii noi (n).

Asterisc – *

a* inseamna 0 sau mai multe caractere a. De exemplu:

Plus – +

a+ inseamna unul sau mai multe caractere a.

Semnul intrebarii – ?

Semnul intrebarii verifica daca caracterul (secventa) anterior apare de zero sau o data. Spre exemplu:

[hc]?at va aproba secventele de text “hat”, “cat” si “at”.

a? inseamna zero sau un caracter a.

Acoladele – {}

a{3} Un numar de exact 3 caractere a
a{3,} 3 sau mai multe caractere a
a{,3} Pana la 3 caractere a
a{3,6} Intre 3 si 6 caractere a

Subpattern – ()

Gruparea (meta)caracterelor se face cu ajutorul parantezelor rotunde. Astfel, daca vrem sa aplicam metacaractere unui grup de (meta)caractere, facem asta cu ajutorul parantezelor rotunde.

Spre exemplu, /(abc)+/ gaseste unul sau mai multe grupuri de caractere “abc” intr-o secventa de text data.

/(ne)?placere/ gaseste secventa de caractere “neplacere” sau secventa “placere”.

Sau logic – |

Backslash – /

Backslash este folosit pentru a afisarea metacaracterelor in calitate de caractere literale in regex. Astfel, daca vrem sa folosim metacaracterele ^+*.?$()|[ in calitate de caractere literale, vom pune in fata lor un backslash.

 

3 thoughts on “PHP si expresiile regulate (partea I)

  1. Pingback: Expresii regulate | Tutoriale Revizie IT

Lasă un răspuns

Your email address will not be published. Required fields are marked *

No spam? * Time limit is exhausted. Please reload CAPTCHA.