【问题标题】:mysql REGEXP not matchingmysql REGEXP 不匹配
【发布时间】:2017-02-11 21:56:07
【问题描述】:

我有一个正则表达式,用于捕获字符串中的电话号码

/[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 使用什么。

【问题讨论】:

  • 感谢分享状态报告。 (您不确定 MySQL 将什么用于正则表达式引擎。这在 MySQL 参考手册中有记录,该手册可用。)但我没有看到实际的 问题

标签: php mysql regex


【解决方案1】:

使用

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

因为 MySQL REGEXP 不支持 \s\d

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

【讨论】:

  • 仅供参考:MySQL REGEXP 没有锚定模式,而是在字符串内的任何位置查找匹配项(称为部分匹配)。 MySQL 使用 POSIX 正则表达式风格,一组非常有限的正则表达式模式,但是,POSIX 字符类也可以使用。请注意,您可能想使用[[:digit:]] 代替\d,或使用[:space:] 代替[:blank:] - 测试一下哪个效果最好。
  • 您在哪里可以找到有关 MySQL 中 REGEXP 支持的信息?我遇到了同样的问题,文档没有提到这些限制。
  • @Dherik 您使用的 MySQL 版本是什么? MySql v.8 之前的旧版本使用 POSIX 正则表达式引擎,因此您可以查看所有与 POSIX 正则表达式相关的参考。
  • 我使用的是5.7 版本
猜你喜欢
  • 2011-12-21
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
相关资源
最近更新 更多