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

Раздел: Строковые функции PHP -> Строковые манипуляции

Основные методы замены подстрок

В PHP существует несколько функций для замены частей строк. Наиболее универсальная и производительная - str_replace. Рассмотрим её и альтернативы.

Как эффективно заменить все вхождения подстроки в строке?

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

<?php
$text = 'Я люблю PHP и MySQL';
$newText = str_replace('PHP', 'JavaScript', $text);
echo $newText; // Я люблю JavaScript и MySQL
?>

Php замена подстроки (замена подстроки в php)

Я люблю JavaScript и MySQL

Первый аргумент - что ищем, второй - на что заменяем, третий - исходная строка. Можно передавать массивы для множественных замен.

Типичная ошибка: если искомый и заменяемый элементы массива имеют совпадающие значения, может возникнуть цепная замена. Лучше избегать таких ситуаций или использовать strtr.

Как заменить подстроку без учёта регистра?

Функция str_ireplace - регистронезависимый аналог str_replace. Полезна при поиске, где регистр не важен.

<?php
$text = 'Php - популярный язык';
$result = str_ireplace('php', 'Python', $text);
echo $result; // Python - популярный язык
?>
Python - популярный язык

Сигнатура аналогична str_replace, но поиск игнорирует регистр.

Проблема: при использовании массивов str_ireplace может давать неожиданный порядок замен, если один элемент является подстрокой другого. Рекомендуется сначала заменять более длинные строки.

Как заменить текст в заданной позиции строки?

Функция substr_replace заменяет часть строки, начиная с указанного смещения. Она не ищет подстроку, а оперирует позициями.

<?php
$str = 'Привет, мир!';
$result = substr_replace($str, 'вселенная', 9, 3);
echo $result; // Привет, вселенная!
?>
Привет, вселенная!

Третий параметр - начальная позиция, четвёртый - длина заменяемой части. Если длина не указана, замена происходит до конца строки.

Распространённая ошибка: отрицательное смещение ведёт к замене с конца строки, что может запутать. Обязательно тестировать на крайних значениях.

Как заменить подстроку по шаблону (регулярному выражению)?

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

<?php
$text = 'Цены: 50$, 100$, 200$';
$result = preg_replace('/\\d+\$/', 'USD', $text);
echo $result; // Цены: USD, USD, USD
?>
Цены: USD, USD, USD

Шаблон /\\d+\$/ ищет одну или более цифр, за которыми следует знак доллара. Замена происходит на 'USD'.

Типичная проблема: неверно экранированные символы (например, обратные слеши) в шаблоне вызывают ошибки. Используйте разделители (например, /) и проверяйте шаблон через preg_last_error().

Расширенные примеры замены подстрок

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

Пример 1: Замена с подсчётом количества замен

Пример
<?php
$text = 'раз раз раз';
$count = 0;
$new = str_replace('раз', 'два', $text, $count);
echo 'Результат: ' . $new . ', замен: ' . $count;
?>
Результат: два два два, замен: 3

Пример 2: Использование обратных ссылок в preg_replace

Пример
<?php
$date = '2025-03-15';
$newDate = preg_replace('/(\\d{4})-(\\d{2})-(\\d{2})/', '$3.$2.$1', $date);
echo $newDate;
?>
15.03.2025

Пример 3: preg_replace_callback с пользовательской функцией

Пример
<?php
$text = 'У нас есть 5 яблок и 3 груши';
$result = preg_replace_callback('/\\d+/', function($matches) {
    return $matches[0] * 2;
}, $text);
echo $result;
?>
У нас есть 10 яблок и 6 груши

Пример 4: Замена для многобайтовых строк с mb_ereg_replace

Пример
<?php
$textMb = 'Привет, мир!';
$newMb = mb_ereg_replace('мир', 'вселенная', $textMb);
echo $newMb;
?>
Привет, вселенная!

Пример 5: Комбинирование preg_replace и str_replace

Пример
<?php
$text = 'Цена: 10$ и 20$ (включая налог)';
$step1 = preg_replace('/\\d+\$/', 'N', $text);
$step2 = str_replace('(', ' (', $step1);
echo $step2;
?>
Цена: N и N (включая налог)

Пример 6: Безопасная множественная замена с strtr

Пример
<?php
$subst = array('cat' => 'dog', 'dog' => 'cat');
$text = 'cat and dog';
$result = strtr($text, $subst);
echo $result;
?>
dog and cat

Пример 7: substr_replace на основе strpos

Пример
<?php
$text = 'Hello World';
$pos = strpos($text, 'World');
if ($pos !== false) {
    $new = substr_replace($text, 'PHP', $pos, strlen('World'));
    echo $new;
}
?>
Hello PHP

Пример 8: Удаление скобок и содержимого с помощью lookaround

Пример
<?php
$text = 'email@domain.com (пользователь)';
$clean = preg_replace('/\\s*\\([^)]*\\)\\s*/', '', $text);
echo $clean;
?>
email@domain.com

Пример 9: Замена с игнорированием регистра через preg_replace (флаг i)

Пример
<?php
$text = 'Php is great, but php has competitors';
$result = preg_replace('/\\bphp\\b/i', 'PHP', $text);
echo $result;
?>
PHP is great, but PHP has competitors

Пример 10: Множественная замена с массивами

Пример
<?php
$search = array('apples', 'oranges');
$replace = array('bananas', 'grapes');
$text = 'I like apples and oranges';
$result = str_replace($search, $replace, $text);
echo $result;
?>
I like bananas and grapes

При использовании массивов с str_replace необходимо помнить о возможной цепной замене. Для безопасной одновременной замены рекомендуется strtr.

Замена подстроки в PHP - comments

En
Php замена подстроки (php)