preg_replace($pattern, $replacement, $subject) znajduje w stringu każde dopasowanie wyrażenia regularnego i je zastępuje. preg_replace('/\s+/', ' ', $text) zamienia każdy ciąg spacji, tabulatorów i znaków nowej linii w jedną spację.
Oryginalny string się nie zmienia; preg_replace() zwraca nowy. \b oznacza granicę słowa, dlatego cats zostaje nietknięte.
Odwołania wsteczne: {1} i \1
W zamienniku $1 oznacza to, do czego dopasowała się pierwsza grupa przechwytująca, $2 druga, a $0 całe dopasowanie. Używaj ich, aby przestawić dopasowany tekst.
Pisz zamiennik w pojedynczych cudzysłowach. W podwójnych "\1" staje się sekwencją ósemkową (bajtem 0x01), a "${1}" jest czytane jako zmienna o nazwie 1, która jest niezdefiniowana i używa składni stringów oznaczonej jako przestarzała od PHP 8.2. '\1' w pojedynczych cudzysłowach działa tak samo jak '$1', ale częściej spotyka się zapis $1.
Usuwanie znaków niealfanumerycznych
Zanegowana klasa znaków, [^...], pasuje do wszystkiego, czego nie wymieniono. Zamiana na '' usuwa to. Dla tekstu w innych językach użyj klas Unicode \p{L} (dowolna litera) i \p{N} (dowolna cyfra) z modyfikatorem u, inaczej usuniesz é, ü, polskie litery i każdy znak japoński.
Tworzenie sluga do adresu URL
Kilka wzorców po kolei zamienia tytuł w slug do adresu URL. Najpierw zamień na małe litery, potem każdy ciąg znaków niealfanumerycznych zamień na jeden łącznik, a na koniec usuń łączniki z obu końców:
Kilka wzorców, limit i licznik
$pattern i $replacement mogą być tablicami: każdy wzorzec jest zastępowany zamiennikiem o tym samym indeksie, po kolei. Czwarty argument ogranicza liczbę zamian na wzorzec (-1 oznacza brak limitu), a piąty dostaje liczbę wykonanych zamian.
Obliczanie zamiennika przez preg_replace_callback
Gdy zamiennik zależy od dopasowania, użyj preg_replace_callback(). Wywołuje twoją funkcję raz na każde dopasowanie z tablicą $matches i wstawia to, co funkcja zwróci. Funkcja strzałkowa mieści krótkie callbacki w jednej linii.
preg_replace_callback_array() przyjmuje tablicę par pattern => callback, gdy kilka wzorców potrzebuje każdy własnej funkcji.
Zamiennik ze zmiennej
$ albo ukośnik wsteczny w zamienniku mają znaczenie, więc zamiennik pochodzący od użytkownika lub z bazy danych może zostać zniekształcony. Cena $10 jest czytana jako odwołanie do grupy 10, która nie istnieje, i wychodzi pusta:
Gdy ani szukany tekst, ani zamiennik nie jest wzorcem, prostszym i szybszym wyborem jest str_replace(). Aby sprawdzić wzorzec przed zamianą czegokolwiek, zobacz preg_match().
Najczęściej zadawane pytania
Jak używać odwołań wstecznych w preg_replace?
W zamienniku odwołuj się do grup przechwytujących jako $1, $2 (albo \1): preg_replace('/(\d{4})-(\d{2})-(\d{2})/', '$3/$2/$1', '2026-03-14') zwraca "14/03/2026". Pisz zamiennik w pojedynczych cudzysłowach i używaj ${1}, gdy po odwołaniu następuje cyfra.
Jak usunąć wszystkie znaki niealfanumeryczne w PHP?
preg_replace('/[^a-zA-Z0-9]/', '', $s) zostawia tylko litery i cyfry ASCII. Aby zachować litery z każdego języka (é, ü, ą, 日本語), użyj klas Unicode z modyfikatorem u: preg_replace('/[^\p{L}\p{N}]/u', '', $s).
Czym różni się preg_replace od preg_replace_callback?
preg_replace() przyjmuje stały string zamiennika z miejscami $1. preg_replace_callback() wywołuje funkcję dla każdego dopasowania i używa wartości, którą ona zwróci, więc możesz obliczyć zamiennik: zamienić na wielkie litery, wykonać na nim obliczenia albo wyszukać go w tablicy.
Używać str_replace czy preg_replace?
Używaj str_replace(), gdy zamieniasz stały tekst: jest szybsze i nie wymaga escapowania. Używaj preg_replace(), gdy tekst do zamiany pasuje do wzorca, na przykład dowolny ciąg spacji, dowolna cyfra albo granica słowa.
Jak zamienić przez preg_replace tylko pierwsze dopasowanie?
Podaj limit jako czwarty argument: preg_replace('/\d+/', '#', 'a1 b2 c3', 1) zwraca "a# b2 c3". Piąty argument, przekazywany przez referencję, dostaje liczbę wykonanych zamian.