2013-11-26 80 views
2

我有以下查询:MYSQL中的REGEX无法正常工作?

SELECT COUNT(*) 
FROM 'users' 
WHERE (
summary REGEXP '^\\(?[\\d]{3}\\)?[\\s-]?[\\d]{3}[\\s-]?[\\d]{4}$' OR 
bio REGEXP '^\\(?[\\d]{3}\\)?[\\s-]?[\\d]{3}[\\s-]?[\\d]{4}$' OR 
about_me REGEXP '^\\(?[\\d]{3}\\)?[\\s-]?[\\d]{3}[\\s-]?[\\d]{4}$' 
);604-456-1234 

我已经测试了正则表达式的位置 - >http://rubular.com/和它适合我的情况。

我有一个用户的生物“604-456-1234”上有下列字符串,它应该返回,但不是。

为什么?

+2

我没有仔细看看你的查询,所以我不能给你具体的查询,但在Ruby中的正则表达式肯定不是MySQL中的正则表达式,所以它不是特别的令人惊讶的是,如果它不匹配使用rubular.com devloping – dirkk

+2

如果你有一个大表,并需要定期执行该查询,你会去有重大的性能问题,因为您需要执行全表扫描才能完成查询。如果这是你的系统的常规部分,你需要在他们的信息中找到具有电话号码的用户,也许你会考虑添加一个'has_phone' tinyint字段来查询,并根据手机的存在插入数据时设置该字段信息。 –

回答

2

我的错误,你做错了[\ d]不工作,你需要使用[0-9],所以使用:

'^\\(?[0-9]{3}\\)?[\\s-]?[0-9]{3}[\\s-]?[0-9]{4}$' 

作品,具体看这里:http://dev.mysql.com/doc/refman/5.1/en/regexp.html没有参考\d被支持

+0

还有一个问题,你知道如何使正则表达式匹配“asdasdadsad(604)456-1234”...现在它只匹配“(604)456-1234”如果没有其他字符串。 Thx @nrathaus – content01

+0

从一开始就删除''''''''''''意味着“以”开头“ – nrathaus