Мне нужно проверить, является ли данная строка палиндромом, используя PostgreSQL. Первый подход, который пришел мне в голову, это использовать регулярные выражения.
Я нашел хороший пример регулярного выражения здесь .
Регулярное выражение: \A(?:(.)(?=.*?(\1\2?)\z))*?.?\2\z
.
Он отлично работает в моем браузере. Но когда я попытался применить его в PostgreSQL 11.2 (в Windows 10), он не работал должным образом.
Что я пробовал до сих пор:
Выход из обратной косой черты (не работал):
select '23200000232' ~ '\\\\A(?:(.)(?=.*?(\\\\1\\\\2?)\\\\Z))*?.?\\\\2\\\\Z' as r;
Ожидаемое значение true, возвращаемое значение false.
Использование специального экранирующего синтаксиса E'...'
(не работает):
select '23200000232' ~ E'\A(?:(.)(?=.*?(\1\2?)\Z))*?.?\2\Z' as r;
Ожидается истина, возвращается ложь.
Между тем select '23200000232' ~ E'232(.)+232' as r;
возвращает истину, как и ожидалось;
Выполнение set standard_conforming_strings=on;
прямо перед тем, как мой запрос не помог.
Использование малого \Z
и заглавной буквы \Z
(в соответствии с документацией по регулярным выражениям PostgreSQL ) для определения конца строки не помогло.