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);бонан
echo preg_replace('/php/i', 'PHP', 'Я изучаю Php');Я изучаю PHP
preg_replace('/\s/', '', 'Текст с пробелами', -1, $count);
echo $count;3
Похожие функции в PHP
Функция для простой замены текста без регулярных выражений. Работает быстрее для задач с известными строками.
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
Аналоги в других языках
import re
result = re.sub(r'\d+', '999', 'Число: 123')
print(result)Число: 999
let text = 'Цена 200 руб.';
let result = text.replace(/\d+/, '300');
console.log(result);Цена 300 руб.
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 = '$1 текст';
echo preg_replace('/(начало)/', $replacement, 'начало');текст
Для буквальной замены используйте \\$1 или функцию preg_quote.
echo preg_replace('/<.*>/', '', 'жирный и курсив');и
Проблема решается использованием ленивых квантификаторов: '/<.*?>/'.
Изменения в новых версиях PHP
Добавлена поддержка использования preg_replace_callback_array для выполнения нескольких замен с разными callback-функциями.
Введен модификатор J, позволяющий дублировать имена групп в шаблоне.
При передаче неверного типа аргумента теперь выбрасывается исключение TypeError. Ранее возвращалось значение null и выдавалось предупреждение.
Расширенные примеры
$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
$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;еждоК еовол ьтунереветь
$text = 'Это это пример повторов повторов';
$clean = preg_replace('/\b(\w+)\s+\1\b/i', '$1', $text);
echo $clean;Это пример повторов
$text = 'Очень длинная строка, которую нужно разбить на части.';
$chunks = preg_replace('/.{1,10}(\s|$)/', "$0\n", $text);
echo $chunks;Очень длин ная строк а, котору ю нужно разбить на части.
$map = ['/красный/' => 'синий', '/яблоко/' => 'апельсин'];
$text = 'красный цвет и яблоко';
$result = preg_replace(array_keys($map), array_values($map), $text);
echo $result;синий цвет и апельсин