chevron-left chevron-right

Piotr Nalepa Frontend, architecture and AI

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

This version
blog.piotrnalepa.pl/2009/09/28/php-wyrazenia-regularne-podstawy-i-przyklady
Published
Author
, Staff Software Engineer
Category
PHP
Feedback
Write to me · Post on X

This post is 17 years old. Browsers and tools may have changed since then, so check the code against current documentation before you use it.

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.

Section 1Wyraż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

Section 2Funkcje 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

Section 3Wyrażenia regularne - przykłady

  1. Walidacja adresu URL

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

    Example 1PHP
    					$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ą.

    Example 2PHP
    					$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.

    Example 3PHP
    					$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.

    Example 4PHP
    					$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.

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


  6. Zamiania cudzysłowiów na apostrofy

    Tak jak w tytule.

    Example 6PHP
    					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ę.

    Example 7PHP
    					'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.

    Example 8PHP
    					$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ć.

Share
Feedback

About the author

Staff Software Engineer

I've been writing this blog since 2009 and building for the web professionally for 14 years. Today I lead the frontend of the Cosmos platform at Bishop Fox, where I've been since day one of the project. Before that I worked at OLX, KUDO, Auto1 and eZ Systems. Here I write about what I've learned in practice: JavaScript, TypeScript, React, CSS and frontend architecture. I've also spoken at conferences across Poland and Europe. Got a question or an idea for a post? Let me know!