Preg replace: примеры (PHP)

Использование preg_replace для работы с регулярными выражениями в PHP
Раздел: Регулярные выражения
preg_replace(string|array $pattern, string|array $replacement, string|array $subject, int $limit = -1, int &$count = null): string|array|null

Описание функции preg_replace

Функция preg_replace в PHP выполняет поиск и замену текста по регулярному выражению. Применяется при необходимости сложного поиска с использованием шаблонов, например, для форматирования строк, очистки данных или извлечения информации.

Аргументы функции
  • pattern (обязательный): строка с регулярным выражением или массив таких строк. Может включать модификаторы, например, '/pattern/i'.
  • replacement (обязательный): строка или массив строк для замены. Может содержать ссылки на найденные группы в виде \\n или $n.
  • subject (обязательный): строка или массив строк, в которых выполняется поиск и замена.
  • limit (опциональный): максимальное количество замен. По умолчанию -1 (без ограничений).
  • count (опциональный): переменная, в которую записывается количество выполненных замен.

Краткие примеры использования

Простая замена
echo preg_replace('/кошка/', 'собака', 'У меня есть кошка');
У меня есть собака
Использование групп и ссылок
echo preg_replace('/(\d+)\.(\d+)/', '$2.$1', '123.456');
456.123
Работа с массивами
$subject = ['яблоко', 'груша', 'вишня'];
$result = preg_replace(['/яблоко/', '/груша/'], ['apple', 'pear'], $subject);
print_r($result);
Array
(
    [0] => apple
    [1] => pear
    [2] => вишня
)
Лимит замен
echo preg_replace('/а/', 'о', 'банан', 1);
бонан
Модификатор i (регистронезависимый поиск)
echo preg_replace('/php/i', 'PHP', 'Я изучаю Php');
Я изучаю PHP
Подсчет замен
preg_replace('/\s/', '', 'Текст с пробелами', -1, $count);
echo $count;
3

Похожие функции в PHP

str_replace

Функция для простой замены текста без регулярных выражений. Работает быстрее для задач с известными строками.

echo str_replace('мир', 'друг', 'Привет, мир!');
Привет, друг!

Аналогична preg_replace, но возвращает только измененные значения, что удобно для фильтрации массивов.

$arr = ['яблоко', 'груша', 'вишня'];
print_r(preg_filter('/я/', 'Я', $arr));
Array
(
    [0] => Яблоко
    [1] => грЯша
    [2] => вИшня
)

Используется, когда замена требует сложной логики, заданной функцией обратного вызова.

echo preg_replace_callback('/\d+/', fn($m) => $m[0]*2, 'Цена: 100');
Цена: 200

Аналоги в других языках

Python: re.sub
import re
result = re.sub(r'\d+', '999', 'Число: 123')
print(result)
Число: 999
JavaScript: replace с регулярным выражением
let text = 'Цена 200 руб.';
let result = text.replace(/\d+/, '300');
console.log(result);
Цена 300 руб.
MySQL: REGEXP_REPLACE
SELECT REGEXP_REPLACE('текст 123', '[0-9]+', '456');
текст 456
Особенности

В Python и JavaScript регулярные выражения являются объектами с методами. В MySQL работа ведется в контексте запросов. Синтаксис шаблонов имеет отличия, например, в экранировании символов.

Типичные ошибки

Некорректный шаблон
echo preg_replace('/[0-9/', '', 'текст'); // Отсутствует закрывающая скобка
Warning: preg_replace(): Compilation failed: missing terminating ] for character class
Использование переменных в replacement без экранирования
$replacement = '$1 текст';
echo preg_replace('/(начало)/', $replacement, 'начало');
текст

Для буквальной замены используйте \\$1 или функцию preg_quote.

Жадные квантификаторы
echo preg_replace('/<.*>/', '', 'жирный и курсив');
 и 

Проблема решается использованием ленивых квантификаторов: '/<.*?>/'.

Изменения в новых версиях PHP

PHP 7.0

Добавлена поддержка использования preg_replace_callback_array для выполнения нескольких замен с разными callback-функциями.

PHP 7.4

Введен модификатор J, позволяющий дублировать имена групп в шаблоне.

PHP 8.0

При передаче неверного типа аргумента теперь выбрасывается исключение TypeError. Ранее возвращалось значение null и выдавалось предупреждение.

Расширенные примеры

Форматирование номера телефона
Пример php
$phone = '+71234567890';
$formatted = preg_replace('/(\d)(\d{3})(\d{3})(\d{2})(\d{2})/', '$1 ($2) $3-$4-$5', $phone);
echo $formatted;
+7 (123) 456-78-90
Обратный порядок слов в предложении
Пример php
$sentence = 'Каждое слово перевернуть';
$reversed = preg_replace('/\b(\w+)\b/e', 'strrev("$1")', $sentence); // Модификатор e удален в PHP 7.0
// Альтернатива для новых версий:
$reversed = preg_replace_callback('/\b(\w+)\b/', fn($m) => strrev($m[1]), $sentence);
echo $reversed;
еждоК еовол ьтунереветь
Удаление повторяющихся слов
Пример php
$text = 'Это это пример повторов повторов';
$clean = preg_replace('/\b(\w+)\s+\1\b/i', '$1', $text);
echo $clean;
Это пример повторов
Разбиение текста на строки фиксированной длины
Пример php
$text = 'Очень длинная строка, которую нужно разбить на части.';
$chunks = preg_replace('/.{1,10}(\s|$)/', "$0\n", $text);
echo $chunks;
Очень длин
ная строк
а, котору
ю нужно 
разбить на
 части.
Замена с использованием ассоциативного массива
Пример php
$map = ['/красный/' => 'синий', '/яблоко/' => 'апельсин'];
$text = 'красный цвет и яблоко';
$result = preg_replace(array_keys($map), array_values($map), $text);
echo $result;
синий цвет и апельсин

PHP preg_replace function comments

En
Preg replace Perform a regular expression search and replace