[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
-
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."; }
-
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;
-
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); } }
-
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".
-
Usuwanie powtarzających się znaków punktuacyjnych
Podobnie jak wyżej. Tym razem usuwamy powtórzone kropki.
$text = preg_replace("/.+/i", ".", $text);
-
Zamiania cudzysłowiów na apostrofy
Tak jak w tytule.
preg_replace('B"b([^"x84x93x94rn]+)b"B', '?1?', $text);
-
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'
-
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ć.