Expresii regulate, regex

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.

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.

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.

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


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:


Iata cateva exemple de expresii regulate:

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
ereg - Executa o identificare cu o expresie regulata (anulata incepand cu versiunea PHP 5.3)
ereg_replace - Înlocuieste un sub-sir care corespunde unei expresii regulate (anulata incepand cu versiunea PHP 5.3 - in locul ei poate fi folosita preg_replace)
eregi - Executa o identificare cu o expresie regulata insensibila la diferenta între majuscule si minuscule (anulata incepand cu versiunea PHP 5.3)
eregi_replace - Înlocuieste un sub-sir care corespunde unei expresii regulate insensibile la diferenta între majuscule si minuscule (anulata incepand cu versiunea PHP 5.3 - in locul ei poate fi folosita preg_replace)
preg_replace - Cauta in sir caracterele sau sablonul care se potriveste cu expresia regulata din functie si o inlocuieste cu alte valori date
split - Divide un sir într-un tablou folosind o expresie regulata (anulata incepand cu versiunea PHP 5.3 - in locul ei poate fi folosita preg_split)
sql_regcase - Creaza o expresie regulata, insensibila la diferenta între majuscule si minuscule, dintr-un sir care contine o 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
Lucrul cu siruri 2 <<-- Anterior ----------- Urmator -->> Utilizare variabile cookie

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag adauga rand nou in paragraf?
<b> <br> <p>
Prima linie ...<br>
Alta linie...
Ce proprietate CSS seteaza spatiu dintre litere?
text-size word-spacing letter-spacing
#id {
  letter-spacing: 2px;
}
Ce functie obtine accesul la un element HTML cu un anumit ID?
getElementById() getElementsByTagName() createElement()
var elm = document.getElementById("theID");
var content = elm.innerHTML;
alert(content);
Clic pe instructiunea "echo" utilizata corect.
echo "CoursesWeb.net" echo "CoursesWeb.net"; echo ""CoursesWeb.net";
echo "Adresa URL: http://CoursesWeb.net";
Care din urmatoarele expresii cu "paint" (a picta) se foloseste pentru forma Negativa?
will paint not paint have painted
She does not paint that landscape.
- Ea nu picteaza acel peisaj.
Care din urmatoarele expresii cu "cantar" (a canta) se foloseste pentru propozitie Negativa?
ir a cantar cantaba no cantar
Ella no canta esa canción.
- Ea nu canta acel cantec.
Expresii regulate Regex - Tutoriale PHP