我需要找到存儲在Postgres的所有記錄,下面的正則表達式,其匹配:Postgres的正則表達式的問題
^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$
事情是這樣的:
SELECT * FROM users WHERE users.phone ~ '^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$'
但隨着錯誤此此起彼伏:
invalid regular expression: quantifier operand invalid
爲什麼Postgres不能使用這個正則表達式?
在普通Ruby中使用相同的工作方式很好。
UPDATE
問題是隻與WHERE。當我嘗試:
SELECT '+79637434199' ~ '^((8|\+7)[\- ]?)(\(?\d{3}\)?[\- ]?)[\d\- ]{7,10}'
Postgres返回true。但是,當我嘗試:
SELECT * FROM users WHERE users.phone ~ '^((8|\+7)[\- ]?)(\(?\d{3}\)?[\- ]?)[\d\- ]{7,10}'
結果:「無效的正則表達式:量詞操作無效」。
什麼版本的PostgreSQL是什麼?已經有正則表達式中的一些修復最近處理,所以次要版本號可能是顯著。 – kgrittn