W PHP wyrażenia regularne (regular expressions) są narzędziem służącym do wyszukiwania i manipulacji tekstu. PHP obsługuje dwa główne sposoby korzystania z wyrażeń regularnych:
- PCRE (Perl Compatible Regular Expressions) – funkcje oparte na standardzie wyrażeń regularnych Perl (np.
preg_match
,preg_replace
). - POSIX (Obsolete) – funkcje POSIX (np.
ereg
,eregi
), ale zostały one oznaczone jako przestarzałe i nie są już rekomendowane do użycia.
W praktyce, używa się głównie funkcji PCRE, które są bardziej elastyczne i wydajne.
Rodzaje Wyrażeń Regularnych
Wyrażenia regularne składają się z symboli i operatorów, które mają swoje specyficzne znaczenia. Oto niektóre z podstawowych składników:
- Znaki specjalne:
.
– dowolny znak (oprócz znaku nowej linii).^
– początek ciągu.$
– koniec ciągu.*
– zero lub więcej wystąpień poprzedniego znaku.+
– jedno lub więcej wystąpień poprzedniego znaku.?
– zero lub jedno wystąpienie poprzedniego znaku.[]
– zakres (np.[a-z]
to dowolna mała litera).()
– grupowanie.|
– alternatywa (OR).
- Kwantyfikatory:
{n}
– dokładnien
wystąpień.{n,}
– przynajmniejn
wystąpień.{n,m}
– odn
dom
wystąpień.
- Metaznaki:
\d
– dowolna cyfra (równoważne[0-9]
).\D
– dowolny znak niebędący cyfrą.\w
– dowolny znak alfanumeryczny lub podkreślenie (równoważne[a-zA-Z0-9_]
).\W
– dowolny znak niealfanumeryczny.\s
– dowolny biały znak (spacja, tab, nowa linia).\S
– dowolny znak nie będący białym znakiem.
Przykłady użycia w PHP
- Sprawdzanie, czy ciąg pasuje do wzorca (preg_match)
<?php // Sprawdzanie, czy e-mail jest poprawny $email = "test@example.com"; if (preg_match("/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/", $email)) { echo "Email jest poprawny."; } else { echo "Email jest niepoprawny."; } ?>
Tutaj używamy wyrażenia regularnego, które sprawdza, czy ciąg tekstowy spełnia reguły adresu e-mail.
- Zamiana ciągu (preg_replace)
<?php // Zamiana numeru telefonu na format z myślnikami $phone = "1234567890"; $formattedPhone = preg_replace("/(\d{3})(\d{3})(\d{4})/", "$1-$2-$3", $phone); echo $formattedPhone; // Wyświetli: 123-456-7890 ?>
W powyższym przykładzie zmieniamy format numeru telefonu z ciągu cyfr na format z myślnikami.
- Wyszukiwanie wszystkich wystąpień (preg_match_all)
<?php // Znalezienie wszystkich adresów e-mail w tekście $text = "Skontaktuj się z nami: support@example.com, info@example.org"; preg_match_all("/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/", $text, $matches); print_r($matches); ?>
Ten skrypt znajdzie wszystkie adresy e-mail w tekście i zapisze je w tablicy $matches
.
- Sprawdzanie wzorca z ignorowaniem wielkości liter (preg_match)
<?php // Sprawdzenie, czy w tekście znajduje się wyraz "PHP", niezależnie od wielkości liter $text = "I love php programming!"; if (preg_match("/php/i", $text)) { echo "Znaleziono 'PHP' w tekście!"; } else { echo "Nie znaleziono."; } ?>
Przełącznik i
powoduje, że wyrażenie regularne nie rozróżnia wielkości liter.
- Dzielenie ciągu na podstawie wyrażenia regularnego (preg_split)
<?php // Podzielenie tekstu na słowa, ignorując znaki interpunkcyjne $text = "Witaj, świecie! PHP jest super."; $words = preg_split("/[\s,!.]+/", $text); print_r($words); ?>
Tutaj wyrażenie regularne dzieli tekst na podstawie białych znaków i interpunkcji.
Praktyczne Zastosowanie Wyrażeń Regularnych
- Walidacja danych – np. adresów e-mail, numerów telefonów, kodów pocztowych.
- Wyszukiwanie i zamiana wzorców – np. zamiana linków, wyszukiwanie określonych fraz w tekście.
- Ekstrakcja danych – np. wyciąganie numerów, adresów e-mail z tekstu.
- Filtrowanie danych – np. sprawdzanie, czy wprowadzony tekst spełnia określone kryteria (alfanumeryczne, liczby).
Wyrażenia regularne są potężnym narzędziem do manipulacji tekstu, ale mogą być skomplikowane. Ważne jest testowanie wyrażeń regularnych przed użyciem ich w produkcji, aby uniknąć nieoczekiwanych wyników.