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 xx*– Pasuje do zera lub więcej wystąpień xx?– Pasuje do zera lub jednego wystąpienia xx{n}– Pasuje do n wystąpień xx{n,m}– Pasuje do od n do m wystąpień xx{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.