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ładnienwystąpień.{n,}– przynajmniejnwystąpień.{n,m}– odndomwystą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.