Проверьте, является ли строка палиндромом в PostgreSQL - PullRequest
0 голосов
/ 28 марта 2019

Мне нужно проверить, является ли данная строка палиндромом, используя PostgreSQL. Первый подход, который пришел мне в голову, это использовать регулярные выражения. Я нашел хороший пример регулярного выражения здесь .

Регулярное выражение: \A(?:(.)(?=.*?(\1\2?)\z))*?.?\2\z.

Он отлично работает в моем браузере. Но когда я попытался применить его в PostgreSQL 11.2 (в Windows 10), он не работал должным образом.

Что я пробовал до сих пор:

  1. Выход из обратной косой черты (не работал):

    select '23200000232' ~ '\\\\A(?:(.)(?=.*?(\\\\1\\\\2?)\\\\Z))*?.?\\\\2\\\\Z' as r;
    

    Ожидаемое значение true, возвращаемое значение false.

  2. Использование специального экранирующего синтаксиса E'...' (не работает):

    select '23200000232' ~ E'\A(?:(.)(?=.*?(\1\2?)\Z))*?.?\2\Z' as r;

    Ожидается истина, возвращается ложь. Между тем select '23200000232' ~ E'232(.)+232' as r; возвращает истину, как и ожидалось;

  3. Выполнение set standard_conforming_strings=on; прямо перед тем, как мой запрос не помог.

  4. Использование малого \Z и заглавной буквы \Z (в соответствии с документацией по регулярным выражениям PostgreSQL ) для определения конца строки не помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...