为什么下面的指令返回FALSE?
FALSE
SELECT '[1-3]{5}' SIMILAR TO '22222' ;
我找不到有什么问题,根据Postgres医生...
mhd8tkvw1#
您的基本错误已得到解答。更重要的是,根本不要使用SIMILAR TO,它完全没有意义:
SIMILAR TO
使用LIKE或正则表达式匹配运算符~或其他模式匹配运算符:
LIKE
~
对于1和3之间的5位数,使用the expression @Thomas provided。如果你真的想要在1和3之间有5个 * 相同 * 的数字,就像你的例子所建议的那样,我建议你使用一个 * 反向引用 *:
SELECT '22222' ~ '([1-9])\1{4}';
相关答案,并提供更多解释:
sqlfiddle演示了两者。
jhkqcmku2#
运算符定义为:
string SIMILAR TO pattern
所以第一个参数是要比较的字符串,第二个参数是要比较的正则表达式。您需要:
SELECT '22222' SIMILAR TO '[1-3]{5}';
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
3条答案
按热度按时间mhd8tkvw1#
您的基本错误已得到解答。
更重要的是,根本不要使用
SIMILAR TO
,它完全没有意义:使用
LIKE
或正则表达式匹配运算符~
或其他模式匹配运算符:对于1和3之间的5位数,使用the expression @Thomas provided。
如果你真的想要在1和3之间有5个 * 相同 * 的数字,就像你的例子所建议的那样,我建议你使用一个 * 反向引用 *:
相关答案,并提供更多解释:
sqlfiddle演示了两者。
jhkqcmku2#
运算符定义为:
所以第一个参数是要比较的字符串,第二个参数是要比较的正则表达式。
您需要:
avwztpqn3#
尝试
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