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
$text = 'Цены: 100р, 200р, 300р';
$result = mb_eregi_replace('(\d+)р', function($matches) {
return ($matches[1] * 1.2) . 'р';
}, $text);
echo $result;Цены: 120р, 240р, 360р
Альтернативные функции в PHP
Функция для работы с регулярными выражениями в однобайтовых и многобайтовых кодировках с поддержкой модификатора /u для UTF-8. Работает быстрее для простых замен.
Аналог mb_eregi_replace с учетом регистра символов. Используется когда важен регистр при поиске.
Функция для простой замены текста без использования регулярных выражений, работает быстрее для простых строковых замен.
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
Добавлена возможность передачи null в параметр options. Улучшена обработка ошибок при некорректных регулярных выражениях.
Изменен порядок параметров - параметр options стал необязательным и перемещен в конец. Удалена поддержка устаревшего синтаксиса e-модификатора.
Добавлены предупреждения при использовании устаревших модификаторов. Улучшена поддержка Unicode 14.0.
Расширенные примеры
$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>
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!
$text = 'Это это пример примера повторений повторений';
$result = mb_eregi_replace('\b(\w+)\s+\1\b', '$1', $text);
echo $result;Это пример примера повторений
$csv = 'Имя,"Фамилия, Отчество",Город';
$result = mb_eregi_replace('"([^"]+)"', '[QUOTED: $1]', $csv);
echo $result;Имя,[QUOTED: Фамилия, Отчество],Город
Аналоги в других языках
import re
text = 'Привет, МИР!'
result = re.sub(r'мир', 'Вселенная', text, flags=re.IGNORECASE)
print(result)Привет, Вселенная!
let text = 'Привет, МИР!';
let result = text.replace(/мир/i, 'Вселенная');
console.log(result);Привет, Вселенная!
SELECT REGEXP_REPLACE('Привет, МИР!', 'мир', 'Вселенная', 1, 0, 'i');Привет, Вселенная!
В Python и JavaScript регулярные выражения имеют более богатый синтаксис и лучшую производительность. В MySQL функция доступна только в версиях 8.0+ и работает только с UTF-8.