我需要使用PostgreSQL检查给定的字符串是否是回文。我想到的第一种方法是使用正则表达式。 我找到了一个很好的正则表达式示例here。
正则表达式为:\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;
预期为true,则返回false。
同时select '23200000232' ~ E'232(.)+232' as r;
会按预期返回true;
在查询无济于事之前执行set standard_conforming_strings=on;
。
使用小写的\Z
和大写的\Z
(根据PostgreSQL regex documentation)来定义字符串的结尾没有帮助。