Jump to content

[PHP] Tutorial de expresii regulate în preg_match()


SkiizO
 Share

Recommended Posts

Grad tutorial: incepator mediu avansat

 

<?php
$string = "eu cghjb asd gigiigj@yahoo.com si asda";
$pattern = '/cgh/';
preg_match($pattern, $string, $return);
print_r($return);
?>

 

$variabila reprezintă textul din care extragem informaţii după expresiile regulate.

$pattern reprezintă între conţinând expresiile regulate. Neapărat expresiile se scriu formă linii oblice de mai /[expresie]/.

 

Scriptul de sus va returna ca cgh dovadă că a în fost găsit string steluţa.

 

Simbolul *

<?php
$string = "eu cuuuuub asd gigiigj@yahoo.com si asda";
$pattern = '/cu*/';
preg_match($pattern, $string, $return);
print_r($return);
?>

 

Script-ul va afişa “cuuuuu”.

 

Prin steluţa, se preiau părţile care încep cu caracterul “c” şi continuă cu zero sau mai multe caractere “u”.

 

Asemănător este şi simbolul plus +

Singura diferenţă este ca textul preluat trebuie să aibă cel puţin un caracter u după caracterul iniţial “c”.

 

Semnul întrebării – ?

Ne spune că pot să fie caractere u după caracterul iniţial c sau pot să lipsească.

 

Expresii din paranteze pătrate

Ţin 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);
?>

 

În pattern avem expresia “j[a-z]“.

Deci se caută string-uri care încep cu litera j şi continuă cu orice altă literă (una singură).

 

În script-ul de mai sus se va afişa “jk”. Asta pentru ca în string avem “jksdfb”. Începe cu j şi să se mai afişeze încă o literă [a-z] după j în cazul în care această există.

 

Dacă dorim să preluăm tot cuvântul “jksdfb” folosim expresia “j[a-z]*”.

Dacă o luăm logic, cerem să ni se afişeze ceva care începe cu literă j, şi continuă cu orice altă literă de la a la z. Expresia se opreşte la spaţiul dintre cuvinte deoarece acesta nu este cuprins în [a-z].

 

Expresiile din paranteze pătrate sunt case sensitive. De exemplu dacă în stringul nostru ar fi “jksDfb”. S-ar afişa doar “jks” deoarece D nu este în [a-z] ci este cuprins în [A-Z].

 

Pentru a fi afişat întregul cuvânt “jksDfb” punem expresia de forma “j[a-za-Z]*”. Aceasta înseamnă că poate continua cu oricâte caractere cuprinse atât în [a-z] cât şi în [A-Z].

 

Pentru numere punem la fel condiţia [0-9].

Dacă avem textul “jk2sDfb”, fără condiţia [0-9] ar fi preluat doar “jk”. Oprindu-se la “2″.

Pentru această expresia arată de forma “j[a-za-Z0-9]*”.

 

Caractere multiple

Pentru caractere multiple scriem numărul tipului de caractere în acolade { }.

 

Spre exemplu.

Având string-ul “daaa”.

Folosim expresia “da{3}” pentru a marca faptul că dorim părţile care încep cu literă d şi continuă cu exact 3 litere de “a”.

De asemenea putem folosi “da{2,4}” pentru a marca faptul că dorim părţile care încep cu literă d şi continuă cu 2,3,4 (între două sau patru) litere de a.

Sau putem folosi “da{2,}” pentru a marca faptul că dorim să aibă 2 sau mai multe litere de “a”.

 

Ca demonstraţie practică putem folosi expresiile regulate să 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);
?>

Observând pattern-ul am cerut aşa:

String-uri care încep cu orice literă cuprinsă între a-z sau A-Z sau orice număr de la 0 la 9 Sau mai pot conţine simbolul minus “-” sau simbolul underline “_” sau punct “.”

[a-za-Z0-9-_.]

 

De asemenea simbolul plus + adăugat după “[a-za-Z0-9-_.]” Spune ca poate continuă cu cel puţin încă o literă cuprinsă între a-za-Z0-9 sau “-” , “_” , “.”. DAR va avea la un moment dat un simbol “@” urmat de caractere cuprinse între a-z, A-Z sau 0-9

@[a-za-Z0-9]+

 

Şi în continuare trebuie să conţină şi un punct “.” urmat de 2, 3 sau 4 caractere cuprinse între [a-z], [A-Z].

 

Prin urmare. La e-mail-ul: gig_iigj@yahoo.com şi expresia “[a-za-Z0-9-_.]+@[a-za-Z0-9]+.[a-za-z]{2,4}”

 

Expresia: [a-za-Z0-9-_.]+ Ţine loc de “gig_iigj”

Expresia: “@” Este chiar “@”

Expresia: [a-za-Z0-9]+ Reprezintă “yahoo”.

Expresia: “.” este chiar punctul de la .com spre exemplu

Expresia: [a-za-z]{2,4} reprezintă com din “.com” Care poate fi “.info” sau “.uk” de aceea trebuie să fie la un range de caractere de minim 2 şi maxim 4.

 

Mai există şi domenii cu extensii duble . Cum ar fi .co.uk sau .us.com aşa că puteţi folosi expresia [a-za-z.]{2,6}

 

 

 

Sursa: WorldIT.Info

Edited by SkiizO Capone
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.