【发布时间】:2012-08-22 09:02:40
【问题描述】:
我需要查找存储在 postgres 中的所有记录,匹配以下正则表达式:
^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$
类似这样的:
SELECT * FROM users WHERE users.phone ~ '^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$'
但是这个错误:
无效的正则表达式:量词操作数无效
为什么 Postgres 不能使用这个正则表达式?
在普通的 Ruby 中使用相同的就可以了。
更新
问题仅在于 WHERE。当我尝试:
SELECT '+79637434199' ~ '^((8|\+7)[\- ]?)(\(?\d{3}\)?[\- ]?)[\d\- ]{7,10}'
Postgres 返回真。但是当我尝试时:
SELECT * FROM users WHERE users.phone ~ '^((8|\+7)[\- ]?)(\(?\d{3}\)?[\- ]?)[\d\- ]{7,10}'
结果:“无效的正则表达式:量词操作数无效”。
【问题讨论】:
-
这是什么版本的PostgreSQL?最近对正则表达式处理进行了一些修复,因此次要版本号可能很重要。
标签: regex postgresql