chevron-left chevron-right

[PHP] Wyrażenia regularne – podstawy i przykłady

W dzisiejszym artykule poruszam temat wyrażeń regularnych, ponieważ ciągle stanowią one wciąż trudny orzech do zgryzienia dla wielu osób tworzących aplikacje webowe.

Wyrażenia regularne pozwalają na wykrywanie i identyfikację określonego ciągu znaków w tekście pisanym, który można następnie edytować, usuwać.

Przejdźmy więc do krótkiego przeglądu podstaw, a następnie pokażę kilka przykładów na wykorzystanie wyrażeń regularnych.

Wyrażenia regularne - podstawy

Wyrażenie regularne Do czego pasuje?
stron ciąg "stron"
^stron "stron" jak początek ciągu znaków
stron$ "stron" jako końcówka ciągu znaków
^stron$ "stron" jako kompletny ciąg znaków, nie występują dodatkowe znaki oprócz zdefiniowanych
[abc] a, b lub c
[a-z] jakakolwiek mała litera
[^A-Z] jakikolwiek znak niebędący dużą literą
(gif|jpg) porównuje czy gif czy jpg
[a-z]+ jedna lub więcej małych liter
^[a-zA-Z0-9_]{1,}$ jakiekolwiek słowo z przynajmniej jedną literą, cyfrą lub _
([wx])([yz]) wyszukuje wy, wz, xy lub xz
[^A-Za-z0-9] jakikolwiek symbol, a nie litera duża czy mała lub cyfra
([A-Z]{3}|[0-9]{4}) porównuje czy są 3 litery lub 4 cyfry

Funkcje PHP dotyczące wyrażeń regularnych

Funkcja Opis
preg_match() funkcja ta wyszukuje ciąg znaków wedle wzoru i jeśli wzór wystąpi w ciagu to zwraca prawdę lub fałsz gdy wzór nei pasuje
preg_match_all() podobnie jak wyżej, tylko globalnie
preg_replace() wyszukuje ciag i go zastępuje
preg_split() dzieli ciąg znaków wedle podanego wzoru
preg_grep() wczytuje do tablicy ciągi znaków pasujące do wzoru
preg_ quote() jeśli ciąg zawiera spcjalne znaki typu: *,&,%, itd to ta funkcja je wyłuskuje i pokazuje na ekranie

Wyrażenia regularne - przykłady

  1. Walidacja adresu URL

    Możemy to zrobić korzystając z poniższego kodu:

    					$url = "http://www.piotrnalepa.pl/";
    					if (preg_match('/^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i', $url))
    					{
    					    echo "Podany URL jest poprawny.";
    					}
    					else
    					{
    					    echo "Podany URL jest błędny.";
    					}


  2. Podświetlanie słowa w tekście strony

    Jest to przydatne, gdy chcemy za każdym razem zwrócić uwagę na jakąś frazę, np. "sport", "dieta" czy jakąkolwiek inną.

    					$text = "Horeszków daleki przyjechawszy z której ramię z dala, ręce ciągnął wzdłuż i westchnień, i Waszeć z Wizgirdem dominikanie z miny, Że ją bardzo szybko, suwała. Białe jej oczyma ciekawymi po łacinie. Mężczyznom dano wódkę. wtenczas wszyscy znali. Kibić miała wysmukłą, kształtną, pierś powabną suknię materyjalną, różową, jedwabną gors wycięty, kołnierzyk.";
    					$text = preg_replace("/b(je)b/i", '<span style="background:#b30000; color: #ffffff;">1</span>', $text);
    					echo $text;


  3. Znajdź wszystkie obrazki na stronie

    Dzięki temu możesz znaleźć wszystkie pliki graficzne na stronie i z pomocą cURL'a można stworzyć aplikację pobierającą obrazki ze strony.

    					$obrazki = array();
    					preg_match_all('/(img|src)=("|')[^"'>]+/i', $dane, $typ);
    					unset($dane);
    					$dane=preg_replace('/(img|src)("|'|="|=')(.*)/i',"$3",$typ[0]);
    					foreach($dane as $url)
    					{
    						$info = pathinfo($url);
    						if (isset($info['rozsz']))
    						{
    							if (($info['rozsz'] == 'jpg') ||
    							($info['rozsz'] == 'jpeg') ||
    							($info['rozsz'] == 'gif') ||
    							($info['rozsz'] == 'png'))
    							array_push($obrazki, $url);
    						}
    					}


  4. Usuwanie powtarzających się słów

    Jeśli często się Tobie zdarza mieć powtórzone słowa w tekście, to ten kawałek kodu może być całkiem przydatny dla Ciebie.

    					$text = preg_replace("/s(w+s)1/i", "$1", $text);

    Dzięki temu, zamiast "Ten tekst jest jest fajny." będzie "Ten tekst jest fajny".


  5. Usuwanie powtarzających się znaków punktuacyjnych

    Podobnie jak wyżej. Tym razem usuwamy powtórzone kropki.

    					$text = preg_replace("/.+/i", ".", $text);


  6. Zamiania cudzysłowiów na apostrofy

    Tak jak w tytule.

    					preg_replace('B"b([^"x84x93x94rn]+)b"B', '?1?', $text);


  7. Sprawdzenie poprawności wprowadzonego hasła

    Dzięki temu wyrażeniu regularnemu można kontrolowac poprawność wprowadzonego hasła. Ten przykład sprawdza czy hasło ma conajmniej 6 znaków długości oraz czy zawiera jedną dużą literę, jedną małą oraz cyfrę.

    					'A(?=[-_a-zA-Z0-9]*?[A-Z])(?=[-_a-zA-Z0-9]*?[a-z])(?=[-_a-zA-Z0-9]*?[0-9])[-_a-zA-Z0-9]{6,}z'


  8. Zamiana uśmieszków punktuacyjnych na obrazkowe

    Dzięki temu, możesz zamieniać uśmieszki typu: 🙂 czy 😛 na obrazkowe.

    					$text="Tekst z uśmieszkiem :)";
    					echo str_replace(':)','<img src="usmieszki/happy.png">',$text);


Mam nadzieję, że ten artykuł okazał się pomocny w zrozumieniu po co są wyrażenia regularne oraz jak można je zastosować.