Jeśli kiedykolwiek tworzyłeś stronę internetową w PHP, to na pewno zetknąłeś się z problemem walidacji danych, filtrowania tekstów czy wyszukiwania wzorców w ciągu znaków. W takich sytuacjach wyrażenia regularne (regex) są jak magiczna różdżka – proste, a jednocześnie bardzo potężne narzędzie. W tym artykule pokażę Ci, jak je tworzyć, jak ich używać w PHP i podam kilka praktycznych przykładów, które możesz zastosować od razu w swoim kodzie.
Co to są wyrażenia regularne?
Wyrażenia regularne to wzorce, które służą do przeszukiwania, modyfikowania lub walidacji tekstu. Dzięki regexom możesz szybko sprawdzić, czy ciąg znaków spełnia określone wymagania (np. czy e-mail jest poprawny), znaleźć fragmenty tekstu, które pasują do wzorca, albo nawet zamienić określone fragmenty tekstu na coś innego.
W PHP wykorzystuje się dwie funkcje do pracy z wyrażeniami regularnymi:
preg_match()
– sprawdza, czy wzorzec pasuje do tekstu.preg_replace()
– zamienia wzorce na inny tekst.
Podstawy wyrażeń regularnych w PHP
Pisząc regexy, musisz zrozumieć podstawowe symbole i zasady ich działania. Oto najważniejsze:
- Znaki specjalne:
.
– pasuje do dowolnego znaku.^
– oznacza początek ciągu.$
– oznacza koniec ciągu.*
– pasuje do 0 lub więcej wystąpień.+
– pasuje do 1 lub więcej wystąpień.?
– pasuje do 0 lub 1 wystąpienia.
- Grupy i zakresy:
[abc]
– pasuje do dowolnego znaku z zestawu (a, b lub c).[a-z]
– pasuje do dowolnej małej litery.[0-9]
– pasuje do dowolnej cyfry.[^abc]
– pasuje do dowolnego znaku, który nie znajduje się w zestawie.
- Sekwencje specjalne:
\d
– pasuje do dowolnej cyfry (to samo co[0-9]
).\w
– pasuje do dowolnej litery, cyfry lub znaku podkreślenia (a-z, A-Z, 0-9, _).\s
– pasuje do dowolnego znaku białego (spacja, tabulator, nowa linia).
- Kwantyfikatory:
{n}
– dokładnie n wystąpień.{n,}
– co najmniej n wystąpień.{n,m}
– od n do m wystąpień.
Jak używać wyrażeń regularnych w PHP?
1. Sprawdzanie dopasowania (preg_match
)
Jeśli chcesz sprawdzić, czy jakiś tekst pasuje do określonego wzorca, użyj funkcji preg_match
. Oto prosty przykład:
<?php $tekst = "example@gmail.com"; $wzor = "/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i"; if (preg_match($wzor, $tekst)) { echo "Adres e-mail jest poprawny!"; } else { echo "To nie jest poprawny adres e-mail."; } ?>
Wyjaśnienie wzorca:
^
– początek ciągu.[a-z0-9._%+-]+
– nazwa użytkownika (dowolne znaki alfanumeryczne i niektóre symbole).@
– znak małpy.[a-z0-9.-]+
– domena (np. gmail lub yahoo).\.
– kropka (musimy ją „uciec”, bo jest znakiem specjalnym).[a-z]{2,}
– końcówka domeny (co najmniej 2 litery, np. com, pl).$
– koniec ciągu.i
– flaga oznaczająca ignorowanie wielkości liter.
2. Zamiana tekstu (preg_replace
)
Czasami trzeba coś podmienić w tekście – np. zamienić wszystkie cyfry na gwiazdki. Możesz to zrobić za pomocą preg_replace
:
<?php $tekst = "Moje hasło to: 12345"; $wzor = "/\d/"; $nowy_tekst = preg_replace($wzor, "*", $tekst); echo $nowy_tekst; // Wynik: Moje hasło to: ***** ?>
Wyjaśnienie wzorca:
\d
– pasuje do każdej cyfry.- Funkcja zamienia każdą cyfrę w ciągu na gwiazdkę (
*
).
3. Wyszukiwanie wszystkich dopasowań (preg_match_all
)
Jeśli chcesz znaleźć wszystkie wystąpienia wzorca w tekście, użyj preg_match_all
. Przykład:
<?php $tekst = "Telefon 123-456-789 oraz 987-654-321 są dostępne."; $wzor = "/\d{3}-\d{3}-\d{3}/"; preg_match_all($wzor, $tekst, $wyniki); print_r($wyniki[0]); // Wynik: Array ( [0] => 123-456-789 [1] => 987-654-321 ) ?>
Wyjaśnienie wzorca:
\d{3}
– dokładnie trzy cyfry.-
– myślnik.- Powtarzamy ten wzorzec trzy razy, żeby znaleźć numery telefonów w formacie xxx-xxx-xxx.
Praktyczne przykłady użycia
Walidacja hasła
Hasło musi spełniać kilka warunków: co najmniej 8 znaków, przynajmniej jedna cyfra, jedna wielka litera i jeden znak specjalny.
<?php $haslo = "P@ssw0rd123"; $wzor = "/^(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/"; if (preg_match($wzor, $haslo)) { echo "Hasło jest silne!"; } else { echo "Hasło nie spełnia wymagań."; } ?>
Filtrowanie tagów HTML
Jeśli chcesz usunąć wszystkie znaczniki HTML z tekstu:
<?php $tekst = "<h1>Witaj</h1> w <b>PHP</b>!"; $wzor = "/<.*?>/"; $czysty_tekst = preg_replace($wzor, "", $tekst); echo $czysty_tekst; // Wynik: Witaj w PHP! ?>
Wyodrębnianie adresów URL
Chcesz znaleźć wszystkie adresy URL w tekście? Proszę bardzo:
<?php $tekst = "Odwiedź nas na https://example.com lub http://test.pl."; $wzor = "/https?:\/\/[a-z0-9.-]+\.[a-z]{2,}/i"; preg_match_all($wzor, $tekst, $wyniki); print_r($wyniki[0]); // Wynik: Array ( [0] => https://example.com [1] => http://test.pl ) ?>
Wyrażenia regularne w PHP są bardzo przydatnym narzędziem, które pozwala zaoszczędzić czas i uprościć kod. Chociaż mogą na początku wydawać się skomplikowane, z czasem nauczysz się je czytać i pisać jak mistrz. Pamiętaj, że regularne testowanie wzorców (np. za pomocą narzędzi online, takich jak regex101.com) pomoże Ci unikać błędów i przyspieszy naukę.
Mam nadzieję, że ten artykuł nie tylko wyjaśnił podstawy, ale też zainspirował Cię do wykorzystania regexów w Twoich projektach. Powodzenia w kodowaniu!