Przejdź do głównej treści
Grafika przedstawia ukryty obrazek

Wyrażenia regularne i ich obsługa w PHP oraz JavaScript

Grafika Regex

Wprowadzenie

Wyrażenia regularne (ang. regular expressions, regex) to potężne narzędzie umożliwiające przeszukiwanie, dopasowywanie i manipulację tekstu. Są szeroko stosowane w różnych językach programowania, w tym w PHP i JavaScript. W tym artykule omówimy sposoby obsługi wyrażeń regularnych w obu tych językach oraz przedstawimy przykłady ich zastosowań.

Wyrażenia regularne w PHP

W PHP do obsługi wyrażeń regularnych najczęściej wykorzystuje się funkcje oparte na standardzie PCRE (Perl Compatible Regular Expressions), takie jak:

  • preg_match() — sprawdza, czy dane wyrażenie regularne pasuje do ciągu.
  • preg_match_all() — wyszukuje wszystkie dopasowania.
  • preg_replace() — zamienia dopasowane fragmenty tekstu.

Przykłady wyrażeń regularnych w PHP

1. Proste dopasowanie liczby

$text = "Mam 2 koty.";
if (preg_match('/\d+/', $text, $matches)) {
    echo "Znaleziono liczbę: " . $matches[0];
}

Opis: \d+ dopasowuje jedną lub więcej cyfr.

2. Walidacja adresu e-mail

$email = "example@example.com";
if (preg_match('/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/', $email)) {
    echo "Poprawny adres e-mail.";
} else {
    echo "Niepoprawny adres e-mail.";
}

Opis: Wyrażenie sprawdza poprawność struktury adresu e-mail.

3. Wyszukiwanie słów zaczynających się od litery "k"

$text = "kot i królik";
preg_match_all('/\bk\w*/i', $text, $matches);
print_r($matches);

Opis: \bk\w* wyszukuje słowa zaczynające się na literę k.

Wyrażenia regularne w JavaScript

W JavaScript wyrażenia regularne są obsługiwane przez obiekt RegExp lub bezpośrednio poprzez literały regex, np. /pattern/flags.

Najważniejsze metody to:

  • test() — sprawdza, czy wyrażenie regularne pasuje do ciągu.
  • exec() — zwraca dopasowanie lub null.
  • Metody łańcuchowe: match(), replace(), search(), split().

Przykłady wyrażeń regularnych w JavaScript

1. Proste sprawdzenie obecności cyfry

const text = "Mam 2 koty.";
const regex = /\d+/;
console.log(regex.test(text)); // true

Opis: Wyrażenie /\d+/ sprawdza, czy tekst zawiera co najmniej jedną cyfrę.

2. Walidacja adresu e-mail

const email = "example@example.com";
const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
console.log(regex.test(email)); // true

Opis: Podobnie jak w PHP, to wyrażenie sprawdza poprawność adresu e-mail.

3. Wyszukiwanie słów zaczynających się od litery "k"

const text = "kot i królik";
const matches = text.match(/\bk\w*/gi);
console.log(matches); // ["kot", "królik"]

Opis: Wyrażenie \bk\w* wyszukuje słowa zaczynające się od litery k, niezależnie od wielkości liter.

Zaawansowane przykłady wyrażeń regularnych

1. Wyszukiwanie dat w formacie "DD-MM-YYYY"

PHP:

$text = "Dzisiaj jest 01-02-2025.";
if (preg_match('/\b\d{2}-\d{2}-\d{4}\b/', $text, $matches)) {
    echo "Znaleziono datę: " . $matches[0];
}

JavaScript:

const text = "Dzisiaj jest 01-02-2025.";
const regex = /\b\d{2}-\d{2}-\d{4}\b/;
const match = text.match(regex);
if (match) {
    console.log("Znaleziono datę:", match[0]);
}

2. Ekstrakcja hashtagów z tekstu

PHP:

$text = "#programowanie jest super #php #javascript";
preg_match_all('/#\w+/', $text, $matches);
print_r($matches);

JavaScript:

const text = "#programowanie jest super #php #javascript";
const matches = text.match(/#\w+/g);
console.log(matches); // ["#programowanie", "#php", "#javascript"]

Wskazówka

Zachęcam do zapoznania się z moją aplikacją do budowania i testowania wyrażeń regularnych.

Składnia regex JavaScript

Znaki meta

  • a|b – Pasuje do a lub b
  • . – Dopasowuje dowolny znak (symbol wieloznaczny) z wyjątkiem znaków kończących wiersz
  • \w – Dopasowuje znaki słowa (alfanumeryczne i _)
  • \W – Dopasowuje znaki niebędące słowami
  • \d – Dopasowuje cyfry (0-9)
  • \D – Dopasowuje znaki niebędące cyframi
  • \s – Dopasowuje znaki odstępu (spacja, tabulator, nowy wiersz)
  • \S – Dopasowuje znak inny niż biały
  • [\b] – Dopasowuje znaki cofania
  • \0 – Dopasowuje znaki NULL
  • \n – Dopasowuje znaki nowego wiersza
  • \f – Dopasowuje znaki końca linii
  • \r – Dopasowuje znaki powrotu karetki
  • \t – Dopasowuje znaki tabulacji
  • \v – Dopasowuje znaki tabulacji pionowej
  • \p{} – Dopasowuje znaki o podanej właściwości Unicode
  • \P{} – Dopasowuje znak NIE o podanej właściwości Unicode
  • \ddd – Dopasowuje znak o liczbie ósemkowej ddd
  • \xhh – Dopasowuje znak o liczbie szesnastkowej hh
  • \uhhhh – Dopasowuje znak Unicode o liczbie szesnastkowej hhhh

Klasy znaków

  • [a] – Dopasowuje znak w nawiasach kwadratowych
  • [^a] – Dopasowuje wszystkie znaki NIE znajdujące się w nawiasach kwadratowych
  • [abc] – Dopasowuje wszystkie znaki w nawiasach kwadratowych
  • [^abc] – Dopasowuje wszystkie znaki NIE znajdujące się w nawiasach kwadratowych
  • [a-z] – Dopasowuje wszystkie znaki z zakresu od a do z
  • [^a-z] – Dopasowuje wszystkie znaki NIE znajdujące się w zakresie od a do z
  • [0-9] – Dopasowuje wszystkie znaki z zakresu od 0 do 9
  • [^0-9] – Dopasowuje wszystkie znaki NIE znajdujące się w zakresie od 0 do 9

Kwantyfikatory

  • x+ – Pasuje do co najmniej jednego x
  • x* – Pasuje do zera lub więcej wystąpień x
  • x? – Pasuje do zera lub jednego wystąpienia x
  • x{n} – Pasuje do n wystąpień x
  • x{n,m} – Pasuje do od n do m wystąpień x
  • x{n,} – Pasuje do n lub więcej wystąpień x

Grupy

  • (x) – Dopasowuje x i zapamiętuje dopasowanie
  • (?<n>x) – Dopasowuje x i oznacza je etykietą n
  • (?flag:x) – Włącza flagę(y) dla x
  • (?flag-flag:x) – Wyłącza flagę(y) dla x

Granice

  • ^ – Dopasowuje początek ciągu znaków lub początek wiersza, jeśli ustawiona jest flaga m (wielowierszowa)
  • $ – Dopasowuje koniec ciągu znaków lub koniec wiersza, jeśli ustawiona jest flaga m (wielowierszowa)
  • \b – Dopasowuje początek lub koniec słowa
  • \B – Dopasowuje NIE początek ani koniec słowa
  • (?=...) – Dopasowuje kolejny ciąg znaków
  • (?!...) – Dopasowuje NIE kolejny ciąg znaków
  • (?<=...) – Dopasowuje poprzedni ciąg znaków
  • (?<!...) – Dopasowuje NIE poprzedni ciąg znaków

Flagi

  • /d – Wykonuje dopasowania podciągów
  • /g – Wykonuje dopasowanie globalne (znajdź wszystko)
  • /i – Wykonuje dopasowanie bez uwzględniania wielkości liter
  • /m – Wykonuje dopasowanie wielowierszowe
  • /s – Umożliwia użycie kropki (.) do dopasowywania terminatorów wiersza
  • /u – Włącza obsługę Unicode
  • /v – Uaktualnienie flagi /u zapewniające lepszą obsługę Unicode
  • /y – Wykonuje wyszukiwanie „lepkie”

Podsumowanie

Wyrażenia regularne są niezwykle wszechstronne i przydatne w pracy z tekstem. Zarówno PHP, jak i JavaScript oferują funkcje umożliwiające efektywne korzystanie z tej technologii. Zastosowanie wyrażeń regularnych może znaczenie uprościć rozwiązywanie problemów związanych z walidacją danych, wyszukiwaniem informacji oraz manipulacją tekstu.

1 lutego 2025 19

Kategorie

programowanie

Dziękujemy!
()

Powiązane wpisy

Wizualizacja tematu Automatyczny motyw Bootstrap 53 na bazie pory dnia
4 stycznia 2025 6 min 71

Automatyczny motyw Bootstrap 5.3 na bazie pory dnia

php
Czytaj więcej
Zdjecie zwiazane z Long Polling vs Short Polling Porwnanie
21 stycznia 2025 5 min 26

Long Polling vs. Short Polling: Porównanie

php
Czytaj więcej
Zdjecie zwiazane z Klasa Promise w PHP i jej zastosowanie
5 lutego 2025 7 min 39

Klasa Promise w PHP i jej zastosowanie

php
Czytaj więcej

Poprzedni wpis

Komunikacja kodem Morse'a
Wymiana doświadczeń

Masz podobne doświadczenia?

Chętnie poznam Twoją perspektywę i porozmawiam o tym temacie szerzej.

Napisz do mnie

Każda perspektywa może wnieść coś wartościowego do dyskusji.

Twoja prywatność i pliki cookies

  1. Ta strona internetowa wykorzystuje wyłącznie niezbędne pliki cookies, które są wymagane do jej prawidłowego działania – m.in. do poprawnego wyświetlania treści, zapamiętania podstawowych ustawień przeglądarki oraz zapewnienia stabilności serwisu.
  2. Nie stosuję plików cookies w celach marketingowych, reklamowych ani analitycznych.
  3. Strona ma charakter wyłącznie informacyjny i nie zawiera formularzy kontaktowych, rejestracyjnych ani zakupowych, przez które dane mogłyby być przesyłane na serwer.
  4. Nie zbieram danych osobowych podczas zwykłego korzystania z witryny.
  5. Serwis nie korzysta z certyfikatu SSL, jednak ze względu na informacyjny charakter strony nie jest wymagane przesyłanie poufnych danych. Zalecam jednak, aby nigdy nie wpisywać haseł ani danych osobowych na stronach bez szyfrowanego połączenia.
  6. Korzystając z tej strony, wyrażasz zgodę na używanie wyłącznie niezbędnych plików cookies.

Więcej informacji znajdziesz w mojej polityce prywatności.