Jump to content
crs12decoder

Tutorial de expresii regulate in preg_match()

Recommended Posts


<?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 patrate

Tin 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 multiple

Pentru 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 exemplu

Expresia: [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}

  • Upvote 4
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...