Mb ereg search: примеры (PHP)
mb_ereg_search(string $pattern = null, string $options = null): boolФункция mb_ereg_search предназначена для выполнения поиска по регулярному выражению в строке с многобайтовыми символами, например в кодировке UTF-8. Она является частью расширения mbstring и используется для корректной обработки текста, где символы могут занимать более одного байта.
Функция обычно применяется в сценариях последовательного поиска нескольких вхождений шаблона в тексте. Для начала работы требуется инициализировать строку и шаблон с помощью mb_ereg_search_init.
- pattern (необязательный) – строка, содержащая регулярное выражение. Если аргумент опущен, используется ранее установленный шаблон.
- options (необязательный) – строка с дополнительными опциями. Например, "i" включает регистронезависимый поиск.
Функция возвращает true при обнаружении совпадения, иначе false.
Код:
mb_regex_encoding('UTF-8');
$string = "Пример текста.";
$pattern = "текста";
mb_ereg_search_init($string, $pattern);
$result = mb_ereg_search();
var_dump($result);Результат:
bool(true)
Код:
mb_regex_encoding('UTF-8');
$string = "Пример Текста.";
$pattern = "текста";
mb_ereg_search_init($string, $pattern, "i");
$result = mb_ereg_search();
var_dump($result);Результат:
bool(true)
Код:
mb_regex_encoding('UTF-8');
$string = "один два три";
$pattern = "\\w+";
mb_ereg_search_init($string, $pattern);
mb_ereg_search();
$pos = mb_ereg_search_getpos();
echo "Текущая позиция: $pos";Результат:
Текущая позиция: 3
В PHP существуют другие инструменты для работы с регулярными выражениями:
- preg_match – функция из расширения PCRE, поддерживающая многобайтовые строки с модификатором u. Обычно она работает быстрее и имеет более широкие возможности.
- mb_ereg_match – проверяет соответствие строки регулярному выражению, но только с начала строки.
- mb_ereg_replace – выполняет поиск и замену по регулярному выражению в многобайтовой строке.
Функцию mb_ereg_search удобно применять для циклического поиска нескольких вхождений. Для одиночной проверки чаще используют preg_match.
Если не вызвать mb_ereg_search_init, функция вернет false.
Код:
mb_regex_encoding('UTF-8');
$result = mb_ereg_search("шаблон");
var_dump($result);Результат:
bool(false)
При несовпадении кодировки строки и установленной в mb_regex_encoding поиск может дать неверный результат.
Код:
mb_regex_encoding('ASCII');
$string = "Привет";
$pattern = "рив";
mb_ereg_search_init($string, $pattern);
$result = mb_ereg_search();
var_dump($result);Результат:
bool(false)
В версии PHP 7.1 параметры pattern и options стали необязательными, если ранее была выполнена инициализация через mb_ereg_search_init. В PHP 8.0 улучшена обработка ошибок и производительность расширения mbstring.
Код:
mb_regex_encoding('UTF-8');
$text = "Контакты: test@example.com, admin@site.ru.";
$pattern = "[\\w.]+@[\\w.]+\\.\\w+";
mb_ereg_search_init($text, $pattern);
$emails = [];
while (mb_ereg_search()) {
$regs = mb_ereg_search_getregs();
$emails[] = $regs[0];
}
print_r($emails);Результат:
Array
(
[0] => test@example.com
[1] => admin@site.ru
)Код:
mb_regex_encoding('UTF-8');
$text = "Цены: 100 руб, 200 руб.";
$pattern = "(\\d+) руб";
mb_ereg_search_init($text, $pattern);
while (mb_ereg_search()) {
$regs = mb_ereg_search_getregs();
echo "Найдена сумма: " . $regs[1] . "\n";
}Результат:
Найдена сумма: 100 Найдена сумма: 200
Код:
mb_regex_encoding('UTF-8');
$text = "abc def ghi";
$pattern = "\\w+";
mb_ereg_search_init($text, $pattern);
mb_ereg_search();
mb_ereg_search_setpos(5);
$regs = mb_ereg_search_getregs();
echo "Слово с позиции 5: " . $regs[0];Результат:
Слово с позиции 5: def
Mb ereg search в Python
В модуле re функция re.search выполняет поиск первого совпадения.
Код:
import re
text = "Пример строки."
pattern = r"строки"
result = re.search(pattern, text)
print(result is not None)Результат:
True
Mb ereg search в Javascript
Метод RegExp.prototype.exec позволяет последовательно находить совпадения.
Код:
let text = "Пример строки.";
let pattern = /строки/;
let result = pattern.exec(text);
console.log(result !== null);Результат:
true
Mb ereg search в MySQL
Оператор REGEXP используется в условиях запросов.
Код:
SELECT 'Пример строки.' REGEXP 'строки';Результат:
1