crs12decoder Posted August 27, 2011 Report Posted August 27, 2011 <?php$string = "eu cghjb asd gigiigj@yahoo.com si asda";$pattern = '/cgh/';preg_match($pattern, $string, $return);print_r($return);?>$string reprezinta textul din care extragem informatii dupa expresiile regulate.$pattern reprezinta variabila continand expresiile regulate. Neaparat expresiile se scriu intre linii oblice de forma /[expresie]/.Scriptul de mai sus va returna cgh ca dovada ca a fost gasit in string.Simbolul steluta *<?php$string = "eu cuuuuub asd gigiigj@yahoo.com si asda";$pattern = '/cu*/';preg_match($pattern, $string, $return);print_r($return);?>Script-ul va afisa "cuuuuu".Prin steluta, se preiau partile care incep cu caracterul "c" si continua cu zero sau mai multe caractere "u".Asemanator este si simbolul plus +Singura diferenta este ca textul preluat trebuie sa aiba cel putin un caracter u dupa caracterul initial "c".Semnul intrebarii - ?Ne spune ca pot sa fie caractere u dupa caracterul initial c sau pot sa lipseasca.Expresii din paranteze patrateTin locul anumitor caractere.<?php$string = "eu jksdfb asd gigiigj@yahoo.com si asda";$pattern = '/j[a-z]/';preg_match($pattern, $string, $return);print_r($return);?>In pattern avem expresia "j[a-z]".Deci se cauta string-uri care incep cu litera j si continua cu orice alta litera (una singura).In script-ul de mai sus se va afisa "jk". Asta pentru ca in string avem "jksdfb". Incepe cu j si sa se mai afiseze inca o litera [a-z] dupa j in cazul in care aceasta exista.Daca dorim sa preluam tot cuvantul "jksdfb" folosim expresia "j[a-z]*".Daca o luam logic, cerem sa ni se afiseze ceva care incepe cu litera j, si continua cu orice alta litera de la a la z. Expresia se opreste la spatiul dintre cuvinte deoarece acesta nu este cuprins in [a-z].Expresiile din paranteze patrate sunt case sensitive. De exemplu daca in stringul nostru ar fi "jksDfb". S-ar afisa doar "jks" deoarece D nu este in [a-z] ci este cuprins in [A-Z].Pentru a fi afisat intregul cuvant "jksDfb" punem expresia de forma "j[a-zA-Z]*". Aceasta inseamna ca poate continua cu oricate caractere cuprinse atat in [a-z] cat si in [A-Z].Pentru numere punem la fel conditia [0-9].Daca avem textul "jk2sDfb", fara conditia [0-9] ar fi preluat doar "jk". Oprindu-se la "2".Pentru aceasta expresia arata de forma "j[a-zA-Z0-9]*".Caractere multiplePentru caractere multiple scriem numarul tipului de caractere in acolade { }.Spre exemplu.Avand string-ul "daaa". Folosim expresia "da{3}" pentru a marca faptul ca dorim partile care incep cu litera d si continua cu exact 3 litere de "a".De asemenea putem folosi "da{2,4}" pentru a marca faptul ca dorim partile care incep cu litera d si continua cu 2,3,4 (intre doua sau patru) litere de a.Sau putem folosi "da{2,}" pentru a marca faptul ca dorim sa aiba 2 sau mai multe litere de "a".Ca demonstratie practica putem folosi expresiile regulate sa extragem e-mail-uri dintr-un string.<?php$string = "eu cghjb asd gig_iigj@yahoo.com si asda";$pattern = '/[a-zA-Z0-9-_.]+@[a-zA-Z0-9]+.[a-zA-z]{2,4}/';preg_match($pattern, $string, $return);print_r($return);?>Observand pattern-ul am cerut asa:String-uri care incep cu orice litera cuprinsa intre a-z sau A-Z sau orice numar de la 0 la 9 Sau mai pot contine simbolul minus "-" sau simbolul underline "_" sau punct "." [a-zA-Z0-9-_.] De asemenea simbolul plus + adaugat dupa "[a-zA-Z0-9-_.]" Spune ca poate continua cu cel putin inca o litera cuprinsa intre a-zA-Z0-9 sau "-" , "_" , ".". DAR va avea la un moment dat un simbol "@" urmat de caractere cuprinse intre a-z, A-Z sau 0-9 @[a-zA-Z0-9]+ Si in continuare trebuie sa contina si un punct "." urmat de 2, 3 sau 4 caractere cuprinse intre [a-z], [A-Z].Prin urmare. La e-mail-ul: gig_iigj@yahoo.com si expresia "[a-zA-Z0-9-_.]+@[a-zA-Z0-9]+.[a-zA-z]{2,4}"Expresia: [a-zA-Z0-9-_.]+ Tine loc de "gig_iigj"Expresia: "@" Este chiar "@"Expresia: [a-zA-Z0-9]+ Reprezinta "yahoo".Expresia: "." este chiar punctul de la .com spre exempluExpresia: [a-zA-z]{2,4} reprezinta com din ".com" Care poate fi ".info" sau ".uk" de aceea trebuie sa fie la un range de caractere de minim 2 si maxim 4.Mai exista si domenii cu extensii duble . Cum ar fi .co.uk sau .us.com asa ca puteti folosi expresia [a-zA-z.]{2,6} 4 Quote
Zatarra Posted August 27, 2011 Report Posted August 27, 2011 Bravo, cu toate ca sunt familiar cu sintaxa de la preg_match/preg_match_all apreciez tutorialul tau.+rep Quote
qbert Posted August 27, 2011 Report Posted August 27, 2011 De ajutor: txt2re: headache relief for programmers :: regular expression generator Quote