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

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

Функция mb_eregi_replace

Описание и назначение

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

Аргументы функции

pattern (строка) - регулярное выражение для поиска, может включать модификаторы.

replacement (строка) - строка замены, может содержать ссылки на подмаски вида \\number или $number.

string (строка) - исходная строка для обработки.

options (строка, необязательный) - дополнительные параметры:

  • i - игнорирование регистра (уже включено по умолчанию в mb_eregi_replace)
  • m - многострочный режим
  • x - игнорирование пробелов в шаблоне
  • p - сохранение разделителей строк
  • l - поиск слева направо
  • r - поиск справа налево

Примеры использования

Простая замена с игнорированием регистра
$text = 'Привет, МИР!';
$result = mb_eregi_replace('мир', 'Вселенная', $text);
echo $result;
Привет, Вселенная!
Использование ссылок на подмаски
$text = 'Яблоко и апельсин';
$result = mb_eregi_replace('(яблоко|апельсин)', 'фрукт: $1', $text);
echo $result;
фрукт: Яблоко и фрукт: апельсин
С параметром многострочного режима
$text = "Строка 1\nСтрока 2";
$result = mb_eregi_replace('^строка', 'Линия', $text, 'm');
echo $result;
Линия 1
Линия 2
Замена с использованием callback-функции
$text = 'Цены: 100р, 200р, 300р';
$result = mb_eregi_replace('(\d+)р', function($matches) {
return ($matches[1] * 1.2) . 'р';
}, $text);
echo $result;
Цены: 120р, 240р, 360р

Альтернативные функции в PHP

preg_replace

Функция для работы с регулярными выражениями в однобайтовых и многобайтовых кодировках с поддержкой модификатора /u для UTF-8. Работает быстрее для простых замен.

Аналог mb_eregi_replace с учетом регистра символов. Используется когда важен регистр при поиске.

str_ireplace

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

Когда какую функцию использовать

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

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

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

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

Неверная кодировка внутренних настроек
mb_regex_encoding('ASCII');
$text = 'Привет, мир!';
$result = mb_eregi_replace('мир', 'друг', $text);
echo $result;
Привет, мир! (замена не произошла)
Использование неправильных ссылок на подмаски
$text = 'Test 123';
$result = mb_eregi_replace('(\d+)', '#$0#', $text);
echo $result;
Test #123# (работает, но $0 - это специальная конструкция)
Забытый модификатор для многострочного режима
$text = "Строка 1\nСтрока 2";
$result = mb_eregi_replace('^строка', 'Линия', $text);
echo $result;
Линия 1
Строка 2 (замена только в первой строке)

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

PHP 7.3

Добавлена возможность передачи null в параметр options. Улучшена обработка ошибок при некорректных регулярных выражениях.

PHP 8.0

Изменен порядок параметров - параметр options стал необязательным и перемещен в конец. Удалена поддержка устаревшего синтаксиса e-модификатора.

PHP 8.2

Добавлены предупреждения при использовании устаревших модификаторов. Улучшена поддержка Unicode 14.0.

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

Обработка текста с сохранением форматирования
Пример php
$text = "Заголовок 1\n==========\n\nЗаголовок 2\n----------";
$result = mb_eregi_replace('^(.*?)\n=+$', '<h1>$1</h1>', $text, 'm');
$result = mb_eregi_replace('^(.*?)\n-+$', '<h2>$1</h2>', $result, 'm');
echo $result;
<h1>Заголовок 1</h1>

<h2>Заголовок 2</h2>
Транслитерация кириллицы
Пример php
function transliterate($text) {
$cyr = ['а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п',
'р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я'];
$lat = ['a','b','v','g','d','e','yo','zh','z','i','y','k','l','m','n','o','p',
'r','s','t','u','f','kh','ts','ch','sh','shch','','y','','e','yu','ya'];

for($i=0; $i<count($cyr); $i++) {
$text = mb_eregi_replace($cyr[$i], $lat[$i], $text);
}
return $text;
}

echo transliterate('Привет, мир!');
Privet, mir!
Удаление повторяющихся слов
Пример php
$text = 'Это это пример примера повторений повторений';
$result = mb_eregi_replace('\b(\w+)\s+\1\b', '$1', $text);
echo $result;
Это пример примера повторений
Парсинг CSV с учетом кавычек
Пример php
$csv = 'Имя,"Фамилия, Отчество",Город';
$result = mb_eregi_replace('"([^"]+)"', '[QUOTED: $1]', $csv);
echo $result;
Имя,[QUOTED: Фамилия, Отчество],Город

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

Python: re.sub с флагом re.IGNORECASE
import re
text = 'Привет, МИР!'
result = re.sub(r'мир', 'Вселенная', text, flags=re.IGNORECASE)
print(result)
Привет, Вселенная!
JavaScript: replace с флагом i
let text = 'Привет, МИР!';
let result = text.replace(/мир/i, 'Вселенная');
console.log(result);
Привет, Вселенная!
MySQL: REGEXP_REPLACE
SELECT REGEXP_REPLACE('Привет, МИР!', 'мир', 'Вселенная', 1, 0, 'i');
Привет, Вселенная!
Отличия от PHP реализации

В Python и JavaScript регулярные выражения имеют более богатый синтаксис и лучшую производительность. В MySQL функция доступна только в версиях 8.0+ и работает только с UTF-8.

PHP mb_eregi_replace function comments

En
Mb eregi replace Replace regular expression with multibyte support ignoring case