2016-10-03 92 views
1

我有一个正则表达式用来串MySQL的REGEXP不匹配

/[1,+().-][\s.-]\d{3}[\s.-]\d{3}[\s.-]\d{4}/ 

我尝试使用此查询来查询我的MySQL数据库,这个表达式内赶上电话号码:

SELECT 
    * 
FROM 
    `everything`.`instances_meta` AS m 
WHERE 
    `meta.value` REGEXP "[1,+][\s.-]\d{3}[\s.-]\d{3}[\s.-]\d{4}" 

我可以确认正则表达式,本身,做我想要测试它here,但它不会拉任何匹配时查询。有些东西告诉我我错过了某种表达方式来表示“字符串中的任何地方”。我将指定正则表达式引擎,但我不确定MySql使用什么。

+0

参考:http://dev.mysql.com/doc/refman/5.7/en/regexp.html – spencer7593

+0

感谢您分享状态报告。 (您不确定MySQL用于正则表达式引擎的情况,这在MySQL参考手册中已有记载)。但是我没有看到的是真正的*问题*。 – spencer7593

回答

2

使用

"[1,+][[:blank:].-][0-9]{3}[[:blank:].-][0-9]{3}[[:blank:].-][0-9]{4}" 

像MySQL REGEXP不支持\s\d

[:blank:]匹配空格和制表符,并且[0-9]匹配任何ASCII数字。

+1

仅供参考:MySQL'REGEXP'没有锚定模式,并在字符串内的任何位置查找匹配项(称为*部分匹配*)。 MySQL使用POSIX正则表达式,这是一组非常有限的正则表达式模式,但POSIX字符类也可以使用。请注意,您可能想使用'[[:digit:]]'而不是'\ d'或'[:space:]'而不是'[:blank:]' - 测试哪一个效果最好。 –