【问题标题】:Using MySQL REGEX to match repeating numbers in phone numbers使用 MySQL REGEX 匹配电话号码中的重复数字
【发布时间】:2017-12-11 07:19:36
【问题描述】:

我之前有一个使用 preg_replace 的问题,但似乎无法使用 MySQL REGEX 函数来解决这个问题。基本上,我有一个电话号码数据库。例如:

8452100000

我希望能够像这样动态搜索电话号码:

2XX512YYYY

其中 X 和 Y 可以是任何数字,但每个都代表相同数字的重复。到目前为止,我已经尝试过了,但它不起作用。我可以让它与 PHP preg_match() 一起工作,但不能与 MySQL REGEX() 一起工作。你能看出我在这里做错了吗?

SELECT * FROM numbers WHERE number REGEXP '^2[[:digit:]]\1{1}512[[:digit:]]\2{4}'

【问题讨论】:

    标签: php mysql regex


    【解决方案1】:

    \1\2 将不起作用,因为 MySQL 不支持对正则表达式中的子组的反向引用。您需要明确说明可以匹配的内容,如下所示:

    SELECT * FROM numbers WHERE number REGEXP '^2(00|11|22|33|44|55|66|77|88|99)512(0000|1111|2222|3333|4444|5555|6666|7777|8888|9999)'
    

    这很笨拙,但在 MySQL 实现与 Perl 兼容的正则表达式 (PCRE) 引擎之前就是这样,除非您想安装扩展。

    【讨论】:

    • 我这样做了,但仍然无法正常工作。这是我试图使用该正则表达式 2445121111 找到的数字,并且没有任何返回
    • Contrell 我也将第一组中的 {1} 切换为 {2},但仍然无法正常工作。它所在的字段是一个bigint。这有关系吗?
    • 请看我的编辑;最后一个计数应该是{3} - 你在重复计算该组中的数字(1 + 4 = 5,但你想要1 + 3 = 4)。
    • 它在 bigint 中的事实并不重要,但这不是存储电话号码的最佳方式。此外,如果您想在评论中标记某人,请使用@ + 显示名称,例如@EdCottrell。 (“Contrell”是一个拼写错误,不会通知任何人您已回复)。
    • @John 使用phpliveregex.com 测试 Ed 的正则表达式返回数字本身和重复的整数。一个包含 3 个元素的数组,编号为 2445121111
    猜你喜欢
    • 1970-01-01
    • 2019-01-02
    • 2014-03-04
    • 2012-12-26
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    相关资源
    最近更新 更多