Wyrażenia regularne w PHP – rodzaje i zastosowanie w praktyce

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:

  1. PCRE (Perl Compatible Regular Expressions) – funkcje oparte na standardzie wyrażeń regularnych Perl (np. preg_match, preg_replace).
  2. 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ładnie n wystąpień.
    • {n,} – przynajmniej n wystąpień.
    • {n,m} – od n do m 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

  1. Sprawdzanie, czy ciąg pasuje do wzorca (preg_match)
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?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.";
}
?>
<?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."; } ?>
<?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.

  1. Zamiana ciągu (preg_replace)
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?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
?>
<?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 ?>
<?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.

  1. Wyszukiwanie wszystkich wystąpień (preg_match_all)
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?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);
?>
<?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); ?>
<?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.

  1. Sprawdzanie wzorca z ignorowaniem wielkości liter (preg_match)
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?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.";
}
?>
<?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."; } ?>
<?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.

  1. Dzielenie ciągu na podstawie wyrażenia regularnego (preg_split)
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
// Podzielenie tekstu na słowa, ignorując znaki interpunkcyjne
$text = "Witaj, świecie! PHP jest super.";
$words = preg_split("/[\s,!.]+/", $text);
print_r($words);
?>
<?php // Podzielenie tekstu na słowa, ignorując znaki interpunkcyjne $text = "Witaj, świecie! PHP jest super."; $words = preg_split("/[\s,!.]+/", $text); print_r($words); ?>
<?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

  1. Walidacja danych – np. adresów e-mail, numerów telefonów, kodów pocztowych.
  2. Wyszukiwanie i zamiana wzorców – np. zamiana linków, wyszukiwanie określonych fraz w tekście.
  3. Ekstrakcja danych – np. wyciąganie numerów, adresów e-mail z tekstu.
  4. 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.

Szukasz taniego i dobrego hostingu dla swojej strony www? - Sprawdź Seohost.pl