Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Экранирование символов от регулярных выражений / 2 сообщений из 2, страница 1 из 1
05.04.2021, 21:50
    #40060010
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование символов от регулярных выражений
Всем привет!

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

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

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


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

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

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

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

Есть решение какое-то?
...
Рейтинг: 0 / 0
03.09.2021, 16:13
    #40095155
megabooster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование символов от регулярных выражений
В строке перед каждым спецсимволом вставить обратный слэш:

Код: plsql
1.
select regexp_replace(user_input_string, '([\.\\\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:\-\#])', '\\\1', 'g');
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Экранирование символов от регулярных выражений / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]