检查字符串在PostgreSQL中是否是回文

时间:2019-03-28 18:51:54

标签: regex postgresql palindrome

我需要使用PostgreSQL检查给定的字符串是否是回文。我想到的第一种方法是使用正则表达式。 我找到了一个很好的正则表达式示例here

正则表达式为:\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;

    预期为true,则返回false。 同时select '23200000232' ~ E'232(.)+232' as r;会按预期返回true;

  3. 在查询无济于事之前执行set standard_conforming_strings=on;

  4. 使用小写的\Z和大写的\Z(根据PostgreSQL regex documentation)来定义字符串的结尾没有帮助。

0 个答案:

没有答案