Curs Php-mysql

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

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag defineste zona de click intr-o harta creata dintr-o imagine?
<map> <img> <area>
<img src="image.jpg" usemap="#map1">
<map name="map1">
  <area shape="rect" coords="9, 120, 56, 149" href="#">
  <area shape="rect" coords="100, 200, 156, 249" href="#">
</map>
Ce proprietate CSS indica ce sa se intample cand continutul unui element depaseste dimensiunile lui?
display overflow position
#id {
  overflow: auto;
}
Clic pe evenimentul care este declansat cand mouse-ul e deasupra unui obiect.
onclick onmouseover onmouseout
document.getElementById("id").onmouseover = function(){
  document.write("Sa ai Viata Buna");
}
Indicati variabila PHP ce contine datele adaugate in adresa URL, dupa caracterul "?".
$_SESSION $_GET $_POST
if(isset($_GET["id"])) {
  echo $_GET["id"];
}
Clic pe pronumele reflexiv care e potrivit in propozitia: "Marc is the boy ... won the prize".
who which whoever
Marc is the boy who won the prize.
- Marc e baiatul care a castigat premiul.
Clic pe pronumele reflexiv care e potrivit in propozitia: "Voy a ver al pintor de ... les hablé ayer".
que quien cuyo
Voy a ver al pintor de quien les hablé ayer.
- Ma duc sa vad pictorul despre care ti-am vorbit ieri.
Expresii regulate Regex

Last accessed pages

  1. Metode ale obiectului Array in JS (1479)
  2. Creare si editare pagini HTML (81797)
  3. Gramatica limbii engleze - Prezentare Generala (209928)
  4. Instructiuni repetitive for() (2782)
  5. Adverbele in limba engleza - Adverbs (31775)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (632)
  2. Conditional IF in Limba Engleza - Fraze Conditionale (549)
  3. Gramatica limbii engleze - Prezentare Generala (444)
  4. Exercitii engleza - English Tests and exercises - Grammar (381)
  5. Coduri pt culori (371)