Mb ereg search init: примеры (PHP)
mb_ereg_search_init(string $string, string $pattern = null, string $options = null): boolФункция mb_ereg_search_init
Функция mb_ereg_search_init в PHP подготавливает строку и шаблон для выполнения многобайтового регулярного поиска. Она используется совместно с функциями mb_ereg_search, mb_ereg_search_pos и mb_ereg_search_regs для итеративного поиска совпадений в строке с учетом многобайтовых кодировок.
- $string - строка, в которой будет производиться поиск.
- $pattern - шаблон регулярного выражения. Если аргумент не указан, используется шаблон из предыдущего вызова mb_ereg_search_init или mb_ereg_search.
- $options - опции поиска. Может включать флаги, такие как "i" для регистронезависимого поиска.
Короткие примеры использования
<?php
$string = 'Привет, мир!';
$pattern = 'мир';
mb_ereg_search_init($string, $pattern);
$result = mb_ereg_search();
var_dump($result);
?>bool(true)
<?php
$string = 'Привет, Мир!';
$pattern = 'мир';
mb_ereg_search_init($string, $pattern, 'i');
$result = mb_ereg_search();
var_dump($result);
?>bool(true)
<?php
$string = 'ааа ббб ааа';
$pattern = 'ааа';
mb_ereg_search_init($string, $pattern);
while ($result = mb_ereg_search()) {
$match = mb_ereg_search_getregs();
echo "Найдено: " . $match[0] . "\n";
}
?>Найдено: ааа Найдено: ааа
Похожие функции в PHP
Для работы с регулярными выражениями в PHP доступны функции в нескольких расширениях.
Функции preg_match, preg_match_all и другие из расширения PCRE также поддерживают многобайтовые строки при использовании модификатора u. Они часто быстрее и имеют более богатый синтаксис шаблонов.
Функции mb_ereg_match, mb_ereg_replace и другие из того же расширения. Они специализированы для многобайтовых строк, но могут уступать в производительности.
Функции PCRE предпочтительнее для сложных шаблонов и когда важна производительность. Функции mb_ereg полезны при работе с устаревшим кодом или в средах, где расширение PCRE недоступно.
Типичные ошибки
Если не установлена внутренняя кодировка с помощью mb_regex_encoding, функция может работать некорректно.
<?php
$string = 'Привет';
$pattern = 'Привет';
// Не установлена кодировка
mb_ereg_search_init($string, $pattern);
$result = mb_ereg_search();
var_dump($result);
?>Может вернуть false или вызвать предупреждение
Функция только инициализирует поиск, но не выполняет его. Для получения результата требуется вызвать mb_ereg_search.
<?php
$string = 'Пример';
$pattern = 'Пример';
mb_ereg_search_init($string, $pattern);
// Забыли вызвать mb_ereg_search()
?>Ничего не происходит
Если шаблон содержит синтаксические ошибки, функция может вернуть false или выдать предупреждение.
<?php
$string = 'Текст';
$pattern = '['; // Неправильный шаблон
$result = mb_ereg_search_init($string, $pattern);
var_dump($result);
?>bool(false)
Изменения в последних версиях PHP
В PHP 8.0 функция mb ereg search init была изменена: параметр pattern теперь может принимать значение null. Это позволяет явно указать, что следует использовать предыдущий шаблон.
До PHP 8.0, если требовалось использовать предыдущий шаблон, аргумент просто опускали. Теперь можно явно передать null, что улучшает читаемость кода.
Расширенные примеры использования
<?php
mb_regex_encoding('UTF-8');
$string = 'Иванов Иван Иванович';
$pattern = '^(\w+)\s+(\w+)\s+(\w+)$';
mb_ereg_search_init($string, $pattern);
if (mb_ereg_search()) {
$regs = mb_ereg_search_getregs();
echo "Фамилия: " . $regs[1] . "\n";
echo "Имя: " . $regs[2] . "\n";
echo "Отчество: " . $regs[3] . "\n";
}
?>Фамилия: Иванов Имя: Иван Отчество: Иванович
<?php
mb_regex_encoding('UTF-8');
$string = 'abc abc abc';
$pattern = 'abc';
mb_ereg_search_init($string, $pattern);
$positions = [];
while (mb_ereg_search()) {
$pos = mb_ereg_search_pos();
$positions[] = $pos[0];
}
print_r($positions);
?>Array
(
[0] => 0
[1] => 4
[2] => 8
)<?php
// Установка кодировки SJIS для работы с японским текстом
mb_regex_encoding('SJIS');
$string = mb_convert_encoding('日本語', 'SJIS', 'UTF-8');
$pattern = mb_convert_encoding('日本語', 'SJIS', 'UTF-8');
mb_ereg_search_init($string, $pattern);
$result = mb_ereg_search();
var_dump($result);
?>bool(true)
Альтернативы в других языках
Mb ereg search init в Python
Модуль re для работы с регулярными выражениями. По умолчанию работает с многобайтовыми строками Unicode.
import re
string = 'Привет, мир!'
pattern = re.compile('мир')
result = pattern.search(string)
print(result is not None)True
Mb ereg search init в Javascript
Объект RegExp и методы String, такие как match или matchAll. JavaScript строки представляют собой последовательности кодовых единиц UTF-16.
let string = 'Привет, мир!';
let pattern = /мир/;
let result = string.match(pattern);
console.log(result !== null);true
Mb ereg search init в MySQL
Оператор REGEXP для поиска по шаблону в запросах. Работает с многобайтовыми кодировками, если установлена соответствующая кодировка соединения.
SELECT 'Привет, мир!' REGEXP 'мир' AS result;result: 1