PHP

Экранирование специальных символов внутри регулярного выражения

Задача
Необходимо трактовать такие символы, как * или +, внутри регулярного выражения не как метасимволы, а как литералы. Это полезно, если пользователи вводят в строке поиска то, что впоследствии будет использовано в регулярном выражении.

Решение
Метасимволы Perl-совместимого регулярного выражения экранируются при помощи функции preg_quote():

$pattern = preg_quote('The Education of H*Y*M*A*N K*A*P*L*A*N').':(\d+)';
if (preg_match("/$pattern/",$book_rank,$matches)) {
print "Leo Rosten's book ranked: ".$matches;
}


Функция quotemeta() позволяет экранировать метасимволы POSIX:

$pattern = quotemeta('M*A*S*H').':[0-9]+';
if (ereg($pattern,$tv_show_rank,$matches)) {
print 'Radar, Hot Lips, and the gang ranked: '.$matches;
}


Обсуждение
Вот символы, которые функция preg_quote() превращает в escape-последовательности:

. \ + * ? ^ $ [ ] ( ) { } < > = ! | :


А эти символы будут экранированы функцией quotemeta():

. \ + * ? ^ $ [ ] ( )


Данные функции преобразуют метасимволы в escape-последовательности посредством добавления символа обратной косой черты.
Теги:
регулярные выражения
Добавлено: 22 Июля 2018 15:49:23 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...