postgresql 对正则表达式使用SIMILAR TO?

6rvt4ljy  于 2022-12-12  发布在  PostgreSQL
关注(0)|答案(3)|浏览(147)

为什么下面的指令返回FALSE

SELECT '[1-3]{5}' SIMILAR TO '22222' ;

我找不到有什么问题,根据Postgres医生...

mhd8tkvw

mhd8tkvw1#

您的基本错误已得到解答。
更重要的是,根本不要使用SIMILAR TO,它完全没有意义:

  • PostgreSQL中使用“类似于”的查询性能
  • Postgres中LIKE和~的区别

使用LIKE或正则表达式匹配运算符~或其他模式匹配运算符:

对于1和3之间的5位数,使用the expression @Thomas provided
如果你真的想要在1和3之间有5个 * 相同 * 的数字,就像你的例子所建议的那样,我建议你使用一个 * 反向引用 *:

SELECT '22222' ~ '([1-9])\1{4}';

相关答案,并提供更多解释:

  • 删除重复次数超过5的记录

sqlfiddle演示了两者。

jhkqcmku

jhkqcmku2#

运算符定义为:

string SIMILAR TO pattern

所以第一个参数是要比较的字符串,第二个参数是要比较的正则表达式。
您需要:

SELECT '22222' SIMILAR TO '[1-3]{5}';
avwztpqn

avwztpqn3#

尝试

SELECT '22222' ~ '[1-3]{5}'

SIMILAR不是POSIX标准
SIMILAR TO运算符根据其模式是否与给定的字符串匹配而返回true或false。它与LIKE类似,不同之处在于它使用SQL标准的正则表达式定义来解释模式。SQL正则表达式是LIKE表示法和常见正则表达式表示法之间的一种奇怪的交叉。
...
POSIX正则表达式提供了比LIKE和SIMILAR TO操作符更强大的模式匹配方法。许多Unix工具,如egrep、sed或awk,都使用类似于这里描述的模式匹配语言。
http://www.postgresql.org/docs/9.2/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP

相关问题