Documente Academic
Documente Profesional
Documente Cultură
Ultimul comentariu:
"Atentie! daca folositi functia de genu ereg_replace("(0-9)*","$1",$string) o sa iasa
gramezi de $1 boldate in locu numerelor trebuie sa scrieti ereg_replace("(0-
9)*","\\1",$string).Acum avem toate numerele boldate la locu lor :)"
Adauga comentarii
Toate comentariile
Daca ati intalnit termeni ca regex, expresii regulate, patterned search etc, sau
daca ati citit tutorialul despre mod_rewrite si URLuri frumoase, inseamna ca ati
dat peste niste siruri ciudate de caractere aparent aleatorii.
^[A-Z]{2}[0-9]{6}$
Atat si nimic mai mult. Pare incurcat, dar este de fapt foarte simplu. Sa incercam
sa descifram.
RewriteRule ^([a-zA-Z]+)[/]*$
Avem aici doi operatori necunoscuti. + inseamna de fapt {1,} – unu sau mai mult
– iar * {0,} – poate sa existe sau sa nu existe. In loc de * am putea folosi si ?, cu
efectul ca ? se refera la caracterul precedent (deci \/?), pe cand * la secventa
precedenta (deci [/]*). Ati vazut ca am folosit ?\/. Asta deoarece caracterul slash
este caracter de escape. Cu alte cuvinte, daca vrem sa introducem in regex un
caracter rezervat (cum ar fi *,+,/,?, parantezele etc.) trebuie sa-l “scapam” prin
slash, pentru ca parserul regex sa inteleaga ca este vorba de un caracter si nu de
o comanda speciala.
Un alt exemplu. Pentru a gasi toate cuvintele de forma f[cifra sau x] vom folosi
regexul f[0-9x]{1}
Pentru a gasi tot ce are forma f[doua cifre][orice alt caracter] vom folosi regexul
f[0-9]{2}. – inclusiv punctul. Punctul (.) intr-un regex semnifica orice caracter,
mai putin line breaks.
Un ultim lucru: parantezele rotunde pot grupa mai multe secvente, pentru a le
putea aplica aceleasi comenzi. Mai mult, parantezele rotunde vor retine valori.
Daca grupam astfel: ([a-z]+[0-9]+){3}, valorile pe care le va lua paranteza vor fi
stocate in variabila $1. Daca am avea o a doua paranteza, valorile ei ar fi stocate
in variabila $2 si asa mai departe.
Sa vedem cum lucram cu PHP. Cel mai simplu si mai rapid, vom folosi functiile
preg, portate din PERL. Asta inseamna ca orice regex va deveni /regex/.
Am stabilit stringul in care vom cauta si arrayul in care vor merge emailurile
gasite. Acum nu trebuie decat sa chemam functia:
preg_match_all('/[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_]{2,4}+/',
$string, $emails, PREG_SET_ORDER);
Ce mai este de stiut? Daca doriti un regex find pe un array, este de folosit
preg_grep(), iar daca doriti replace puteti folosi preg_replace(). Succes!
Autor Vlad Fratila