Wyrażenia regularne i ich obsługa w PHP oraz JavaScript
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 lubnull.- 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"]
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.