使用SIMILAR TO进行正则表达式?

时间:2014-07-09 14:28:52

标签: regex postgresql pattern-matching

为什么以下指令返回FALSE

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

根据Postgres的说法,我找不到有什么问题......

3 个答案:

答案 0 :(得分:2)

运营商is defined as

string SIMILAR TO pattern 

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

你需要:

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

对于1到3之间的5位数,请使用the expression @Thomas provided

如果你真的想要1到3之间的5个相同的数字,就像你的例子所示,我建议返回参考

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

相关答案更多解释:
Deleting records with number repeating more than 5

SQL Fiddle demonstrating both.