Mb ereg search regs: примеры (PHP)
mb_ereg_search_regs(string $pattern = null, string $options = null): array|falseФункция mb_ereg_search_regs в PHP
Функция mb_ereg_search_regs() относится к семейству многобайтовых строковых функций PHP для работы с регулярными выражениями. Она выполняет поиск совпадений с многобайтовой регуляркой в заданной строке. Использование этой функции актуально при обработке текстов в кодировках, отличных от однобайтовых, таких как UTF-8, где символы могут занимать более одного байта.
Функция имеет несколько вариантов сигнатуры:
- mb_ereg_search_regs(?string $pattern = null, ?string $options = null): array|false — основная форма.
- mb_ereg_search_regs(?string $pattern = null): array|false — без указания опций.
- pattern (необязательный) — строка с регулярным выражением. Если параметр не указан, используется предыдущий паттерн, заданный через
mb_ereg_search_init(). - options (необязательный) — строка с опциями поиска. Может включать:
"i"для регистронезависимого поиска,"x"для игнорирования пробелов,"m"для многострочного режима.
При успешном поиске функция возвращает массив с найденными совпадениями. Первый элемент массива содержит полное совпадение, последующие — подмаски. Если совпадений нет, возвращается false. При ошибке в регулярном выражении возвращается false и генерируется предупреждение.
Короткие примеры использования mb_ereg_search_regs
mb_regex_encoding('UTF-8');
$string = 'Привет, мир!';
mb_ereg_search_init($string, 'мир');
$result = mb_ereg_search_regs();
print_r($result);Array
(
[0] => мир
)mb_regex_encoding('UTF-8');
$string = 'Иван Петров';
$pattern = '(\\w+)\\s+(\\w+)';
mb_ereg_search_init($string, $pattern);
$result = mb_ereg_search_regs();
print_r($result);Array
(
[0] => Иван Петров
[1] => Иван
[2] => Петров
)mb_regex_encoding('UTF-8');
$string = 'Пример Строки';
$pattern = 'строка';
mb_ereg_search_init($string, $pattern);
$result = mb_ereg_search_regs($pattern, 'i');
print_r($result);Array
(
[0] => Строки
)Похожие функции в PHP
В PHP существуют альтернативные функции для работы с регулярными выражениями, которые отличаются синтаксисом и возможностями.
Функция preg_match() работает с регулярками в кодировке PCRE (Perl Compatible Regular Expressions). Она быстрее функций семейства mb_ereg, но изначально не поддерживает многобайтовые кодировки. Для работы с UTF-8 необходимо использовать модификатор u.
preg_match() предпочтительнее для большинства задач, особенно при работе с UTF-8 и использованием модификатора u. Функции mb_ereg стоит применять при обработке текстов в различных многобайтовых кодировках, когда требуется явное указание кодировки через mb_regex_encoding().
Проверяет, соответствует ли вся строка заданному регулярному выражению. В отличие от mb_ereg_search_regs(), которая ищет совпадения внутри строки, mb_ereg_match() работает с целой строкой.
Типичные ошибки при использовании
Если не вызвать mb_regex_encoding() перед использованием функции, может применяться неправильная кодировка, что приводит к некорректным результатам.
$string = 'Привет';
$pattern = 'рив';
// mb_regex_encoding не вызвана
mb_ereg_search_init($string, $pattern);
$result = mb_ereg_search_regs();
var_dump($result);bool(false)
Синтаксис регулярных выражений в функциях mb_ereg отличается от PCRE. Например, для границы слова используется [[<:]] и [[>:]], а не \\b.
mb_regex_encoding('UTF-8');
$string = 'Слово текст';
$pattern = '\\bтекст\\b'; // Неправильно для mb_ereg
mb_ereg_search_init($string, $pattern);
$result = mb_ereg_search_regs();
var_dump($result);bool(false)
Функция возвращает false как при отсутствии совпадений, так и при ошибках. Важно отличать эти случаи.
Изменения в последних версиях PHP
В PHP 8.0 произошли значительные изменения в функциях многобайтовых регулярных выражений.
Начиная с PHP 8.0, параметры pattern и options могут принимать значение null. Ранее можно было передавать пустую строку.
В PHP 8.0 функции mb_ereg при ошибке в регулярном выражении возвращают false и генерируют предупреждение. В предыдущих версиях могла возвращаться пустая строка или происходить другие неявные поведения.
Были оптимизированы внутренние механизмы работы с многобайтовыми строками, что повысило скорость выполнения функций семейства mb_ereg в PHP 8.x.
Расширенные примеры использования
mb_regex_encoding('UTF-8');
$string = 'test1 test2 test3';
$pattern = 'test\\d';
mb_ereg_search_init($string, $pattern);
$matches = [];
while ($match = mb_ereg_search_regs()) {
$matches[] = $match[0];
mb_ereg_search_setpos(mb_ereg_search_getpos() + mb_strlen($match[0]));
}
print_r($matches);Array
(
[0] => test1
[1] => test2
[2] => test3
)mb_regex_encoding('UTF-8');
$string = 'Дата: 2023-12-31';
$pattern = '(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})';
mb_ereg_search_init($string, $pattern);
$result = mb_ereg_search_regs();
if ($result) {
echo "Год: {$result['year']}, Месяц: {$result['month']}, День: {$result['day']}";
}Год: 2023, Месяц: 12, День: 31
mb_regex_encoding('UTF-8');
$text = "Строка 1\nСтрока 2\nСтрока 3";
$pattern = '^Строка\\s+(\\d+)$';
mb_ereg_search_init($text, $pattern, 'm');
$lines = [];
while ($match = mb_ereg_search_regs()) {
$lines[] = $match[1];
}
print_r($lines);Array
(
[0] => 1
[1] => 2
[2] => 3
)mb_regex_encoding('UTF-8');
$string = 'ТЕКСТ Пример';
$pattern = 'текст пример';
mb_ereg_search_init($string, $pattern);
$result = mb_ereg_search_regs($pattern, 'ix');
print_r($result);Array
(
[0] => ТЕКСТ Пример
)Аналоги функции в других языках
Модуль re в Python предоставляет функцию search() для поиска первого совпадения с регуляркой. По умолчанию поддерживает Unicode.
import re
string = 'Привет, мир!'
pattern = r'мир'
match = re.search(pattern, string)
if match:
print(match.group())мир
Метод match() строк в JavaScript выполняет поиск совпадений с регулярным выражением. Для глобального поиска используется флаг g.
const string = 'Привет, мир!';
const pattern = /мир/;
const result = string.match(pattern);
console.log(result[0]);мир
Функция REGEXP_SUBSTR() в MySQL возвращает подстроку, соответствующую регулярному выражению. Работает с многобайтовыми кодировками при корректной настройке кодировки соединения.
SELECT REGEXP_SUBSTR('Привет, мир!', 'мир');мир