Jump to content
crs12decoder

Tutorial de expresii regulate in preg_match()

Recommended Posts

Posted


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

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...