crs12decoder Posted August 27, 2011 Report Share 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 Link to comment Share on other sites More sharing options...
Zatarra Posted August 27, 2011 Report Share Posted August 27, 2011 Bravo, cu toate ca sunt familiar cu sintaxa de la preg_match/preg_match_all apreciez tutorialul tau.+rep Quote Link to comment Share on other sites More sharing options...
qbert Posted August 27, 2011 Report Share Posted August 27, 2011 De ajutor: txt2re: headache relief for programmers :: regular expression generator Quote Link to comment Share on other sites More sharing options...