相关疑难解决方法(0)

Postgres正则表达式问题

我需要找到存储在postgres中的所有记录,这些记录与以下regexp匹配:

^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$
Run Code Online (Sandbox Code Playgroud)

像这样:

SELECT * FROM users WHERE users.phone ~ '^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$'
Run Code Online (Sandbox Code Playgroud)

但这是错误的:

正则表达式无效:量词操作数无效

为什么Postgres不能使用此正则表达式?

在普通的Ruby中使用相同的代码就可以了。

更新

问题仅在于WHERE。当我尝试:

SELECT '+79637434199' ~ '^((8|\+7)[\- ]?)(\(?\d{3}\)?[\- ]?)[\d\- ]{7,10}'
Run Code Online (Sandbox Code Playgroud)

Postgres返回true。但是当我尝试:

SELECT * FROM users WHERE users.phone ~ '^((8|\+7)[\- ]?)(\(?\d{3}\)?[\- ]?)[\d\- ]{7,10}'
Run Code Online (Sandbox Code Playgroud)

结果:“无效的正则表达式:限定符操作数无效”

regex postgresql

4
推荐指数
1
解决办法
7284
查看次数

标签 统计

postgresql ×1

regex ×1