Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Экранирование символов от регулярных выражений  [new]
Alexey Agafonov
Member

Откуда: Москва
Сообщений: 694
Всем привет!

Мне нужно выбрать из таблицы записи, соответствующие некому шаблону регулярных выражений. Видел в форуме аналогичные вопросы, но ответов не увидел.

Упросил до минимума пример:

select * from tmp where str ~ '<входная строка функции>[0-9]+$'

То есть выбираем записи, соответствующие входной строке и добавляем условие, что на конце цифры.

Все бы хорошо, если бы входная строка не имела бы вид типа 'Test \q test', например В этом случае будет ошибка неизвестного квантификатора.

Усложняется тем, что потенциально могут быть разные символы, не только обратный слэш, а скобки, причем '((...)' (открываются не столько, сколько закрываются, точки, знаки вопроса, в общем, все, что используется в атомах регулярки.

Как можно заэкранировать символы? У меня были мысли все переводить в BASE64, например, но тогда непонятно, как вычленять концовку, что там цифры или еще как-то кодировать, но не придумал адекватного способа. Функции экранирования атомов регулярок я не нашел, есть в PG quote_literal, но она не экранирует все атомы, она экранирует обратные слеши, например, точки не экранирует знаки вопроса и прочее, в общем не предназначена для задачи.

Есть решение какое-то?
5 апр 21, 21:50    [22304805]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить