Mb ereg replace: примеры (PHP)

Примеры применения mb_ereg_replace для работы с текстом
Раздел: Многобайтовые строки
mb_ereg_replace(string $pattern, string $replacement, string $string, ?string $options = null): string|false|null

Функция mb_ereg_replace выполняет замену подстроки по регулярному выражению с поддержкой многобайтных кодировок. Она используется при работе с текстом в кодировках, где символы могут занимать более одного байта, например, UTF-8. Эта функция заменяет все вхождения шаблона в строке на указанную замену.

Аргументы функции
  • pattern (string): Строка регулярного выражения с поддержкой многобайтных символов. Может включать модификаторы.
  • replacement (string): Строка замены. Может содержать ссылки на подмаски в виде \\1, \\2 или \\\\ для обратной косой черты.
  • string (string): Исходная строка для поиска и замены.
  • options (string, необязательный): Строка опций, влияющих на поведение функции. Возможные значения: "i" для регистронезависимого поиска, "m" для многострочного режима, "x" для игнорирования пробелов в шаблоне, "p" и "l" для специфичного поведения поиска.
  • encoding (string, необязательный): Кодировка строк. Если не указана, используется внутренняя кодировка.
Примеры использования
Простая замена

Замена слова в строке с учетом регистра.

$str = "Привет, мир!";
echo mb_ereg_replace("мир", "друг", $str);
Привет, друг!
Использование флага i

Регистронезависимая замена.

$str = "Привет, Мир!";
echo mb_ereg_replace("мир", "друг", $str, "i");
Привет, друг!
Использование подмасок

Использование ссылок на подмаски в строке замены.

$str = "2024-12-31";
echo mb_ereg_replace("(\\\\d{4})-(\\\\d{2})-(\\\\d{2})", "\\\\3.\\\\2.\\\\1", $str);
31.12.2024
Указание кодировки

Явное указание кодировки UTF-8.

$str = "Пример строки";
echo mb_ereg_replace("стр", "новой стр", $str, null, "UTF-8");
Пример новой строки
Похожие функции в PHP

Для работы с регулярными выражениями в PHP существует несколько функций.

preg_replace

Функция preg_replace выполняет поиск и замену по регулярному выражению, но без встроенной поддержки многобайтных кодировок. Для работы с UTF-8 необходимо использовать модификатор u. Она обычно работает быстрее для однобайтных кодировок.

Функция mb_eregi_replace является регистронезависимым аналогом mb_ereg_replace.

str_replace

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

Функцию mb_ereg_replace предпочтительнее использовать при работе с многобайтными строками и необходимости использования регулярных выражений. Для сложных замен в UTF-8 также подойдет preg_replace с модификатором u.

Типичные ошибки
Неправильные ссылки на подмаски

Использование неправильного формата ссылок, например, $1 вместо \\1.

$str = "2024-12-31";
echo mb_ereg_replace("(\\\\d{4})-(\\\\d{2})-(\\\\d{2})", "$3.$2.$1", $str);
$3.$2.$1
Несовпадение кодировок

Попытка обработки строки в одной кодировке при установленной другой.

mb_internal_encoding("CP1251");
$str = "Пример"; // Предположим, строка в UTF-8
echo mb_ereg_replace("П", "п", $str);
Может привести к некорректному результату или пустой строке.
Некорректный шаблон

Использование синтаксиса регулярных выражений preg_replace в шаблоне.

$str = "Тест 123";
echo mb_ereg_replace("/\\\\d+/", "число", $str);
Тест 123
Изменения в последних версиях PHP

В PHP 8 функция mb_ereg_replace была улучшена для более строгой обработки ошибок. Некорректные шаблоны теперь вызывают предупреждение. Также улучшена совместимость с различными кодировками. В более ранних версиях, например, PHP 7.4, поведение при ошибках могло быть менее предсказуемым.

Расширенные примеры
Удаление лишних пробелов

Удаление повторяющихся пробелов и пробелов в начале и конце строки с учетом многобайтных символов.

Пример php
$str = "   Привет,    мир!   ";
$str = mb_ereg_replace("^[\\\\s]+", "", $str);
$str = mb_ereg_replace("[\\\\s]+$", "", $str);
$str = mb_ereg_replace("[\\\\s]{2,}", " ", $str);
echo $str;
Привет, мир!
Транслитерация кириллицы

Замена кириллических символов на латинские.

Пример php
$str = "Привет, мир!";
$patterns = array("/(а)/u", "/(б)/u", "/(в)/u"); // Упрощенный пример
$replacements = array("a", "b", "v");
// Использование в цикле для каждого шаблона
foreach ($patterns as $index => $pattern) {
    $str = mb_ereg_replace($pattern, $replacements[$index], $str);
}
echo $str;
Privet, mir!
Обработка многострочного текста

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

Пример php
$text = "Строка 1\\\\nСтрока 2\\\\nСтрока 3";
echo mb_ereg_replace("^Строка", "Запись", $text, "m");
Запись 1
Запись 2
Запись 3
Фильтрация нежелательных символов

Удаление всех символов, кроме букв и пробелов.

Пример php
$str = "Привет, мир123!";
echo mb_ereg_replace("[^\\\\p{L}\\\\s]", "", $str);
Привет мир
Альтернативы в других языках

Mb ereg replace в Python

В Python для аналогичных операций используется модуль re с методом sub, который по умолчанию поддерживает Unicode.

import re
str = "Привет, мир!"
result = re.sub(r"мир", "друг", str)
print(result)
Привет, друг!

Mb ereg replace в Javascript

В JavaScript используется метод replace для строк с регулярными выражениями, которые также поддерживают Unicode через флаг u.

let str = "Привет, мир!";
let result = str.replace(/мир/u, "друг");
console.log(result);
Привет, друг!

Mb ereg replace в MySQL

В MySQL есть функция REGEXP_REPLACE, которая выполняет замену по регулярному выражению, но поддержка Unicode может зависеть от версии и настроек collation.

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

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

PHP mb_ereg_replace function comments

En
Mb ereg replace Replace regular expression with multibyte support