Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

Экранирование символов регулярного выражения в многобайтовых строках на PHP

#php #регулярные_выражения #строки


У меня есть регулярное выражение которое содержит внешние данные, если из внешних
данных поступит строка содержащая служебные символы регулярного выражения то это покоцает
весь паттерн, пытался найти встроенную функцию для экранирования символов в многобайтовых
строках- не нашел.
Как экранировать символы регулярного выражения?
Пример:

function f(string $data)
{
    //Здесь сначала нужно экранировать символы в строке, но как это сделать?
    $data = screening($data);
    //Затем передать в паттерн регулярного выражения
    string $pattern = "^\{$data}+|{$data}+$";
}

    


Ответы

Ответ 1



Специально для таких целей придумали функцию preg_quote

Ответ 2



Примерно так, вроде никакие спецсимволы не забыл. $data=preg_replace('/([[\]\\.?*(){}+^$|\/])/','\\\\$1',$data); И в регулярке когда пишите {$data}+ пишите лучше в скобках ({$data})+, а то + будет распространятся только на последний символ строки.

Комментариев нет:

Отправить комментарий