Mb ereg replace: примеры (PHP)
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);Привет, друг!
Регистронезависимая замена.
$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 существует несколько функций.
Функция preg_replace выполняет поиск и замену по регулярному выражению, но без встроенной поддержки многобайтных кодировок. Для работы с UTF-8 необходимо использовать модификатор u. Она обычно работает быстрее для однобайтных кодировок.
Функция mb_eregi_replace является регистронезависимым аналогом mb_ereg_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 8 функция mb_ereg_replace была улучшена для более строгой обработки ошибок. Некорректные шаблоны теперь вызывают предупреждение. Также улучшена совместимость с различными кодировками. В более ранних версиях, например, PHP 7.4, поведение при ошибках могло быть менее предсказуемым.
Удаление повторяющихся пробелов и пробелов в начале и конце строки с учетом многобайтных символов.
$str = " Привет, мир! ";
$str = mb_ereg_replace("^[\\\\s]+", "", $str);
$str = mb_ereg_replace("[\\\\s]+$", "", $str);
$str = mb_ereg_replace("[\\\\s]{2,}", " ", $str);
echo $str;Привет, мир!
Замена кириллических символов на латинские.
$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 для работы с каждой строкой отдельно.
$text = "Строка 1\\\\nСтрока 2\\\\nСтрока 3";
echo mb_ereg_replace("^Строка", "Запись", $text, "m");Запись 1 Запись 2 Запись 3
Удаление всех символов, кроме букв и пробелов.
$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 функции заключаются в синтаксисе регулярных выражений и способе указания модификаторов.