【问题标题】:Convert PHP compatible Regular Expression to MySql compatible regular expression - To extract Australian Mobile Numbers将 PHP 兼容的正则表达式转换为 MySql 兼容的正则表达式 - 提取澳大利亚手机号码
【发布时间】:2021-07-26 09:57:43
【问题描述】:

我有一个在 PHP 代码中运行良好的正则表达式。当我将它与 MYSQL 查询一起使用时,它会引发错误。

^(?:(?:\+|0{0,2})61(\s*[\-]\s*)?|[0]?)?[4]\d{8}$

请帮我把它转换成MYSQL兼容的正则表达式。

【问题讨论】:

  • 什么 MySQL 版本?你有没有尝试过?
  • 我在 phpmyadmin 中尝试过以下查询 >> SELECT * FROM table WHERE Mobile_Phone REGEXP "^(?:(?:\+|0{​0,2}​)61( \s*[\-]\s*)?|[0]?)?[4]\d{​8}​$" ORDER BY created_at DESC LIMIT 0, 25 它抛出类似 #1267 的错误 - 非法'regexp'操作的排序规则(latin1_general_ci,IMPLICIT)和(utf8mb4_unicode_ci,COERCIBLE)的混合@WiktorStribiżew请帮助转换。谢谢!
  • 试试^(([+]|0{0,2})61([[:space:]]*-[[:space:]]*)?|0?)?4[0-9]{8}$
  • 太完美了!!感谢您的惊人和快速支持。 :)。请添加解决方案,以便我接受。
  • 好的,请给我一两分钟。

标签: mysql regex posix pcre


【解决方案1】:

您可以使用以下查询在 MySQL 中提取澳大利亚手机号码(以 4、+61、61、04 等开头)

^(([+]|0{0,2})61([[:space:]]*-[[:space:]]*)?|0?)?4[0-9]{8}$

详情

  • ^ - 字符串开头
  • ( - 第一组开始:
    • ([+]|0{0,2}) - 第 2 组匹配 + 或零、一个或两个零
    • 61 - 61 字符串
    • ([[:space:]]*-[[:space:]]*)? - 可选的第 3 组,匹配用零个或多个空格括起来的连字符
  • | - 或
    • 0? - 一个可选的零
  • )? - 第一组的结尾,由于?,这是可选的
  • 4[0-9]{8} - 4 然后是任意八位数字
  • $ - 字符串结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 2012-12-19
    • 2012-04-20
    • 1970-01-01
    • 2020-06-22
    相关资源
    最近更新 更多