【问题标题】:convert PCRE regular expression to mysql query regular expression将PCRE正则表达式转换为mysql查询正则表达式
【发布时间】:2016-07-13 23:20:04
【问题描述】:

我有下面的正则表达式

^(?!\d+$)(?!(?:[^$&%@]*[$&%@]){4})(?!.*\b\w{11}).{3,}$

在 PHP 中运行良好

我希望将其转换为 MySQL 支持的查询。当我在正则表达式之上运行时。我从 reg-exp 得到错误“重复运算符操作数无效”

请帮忙解决这个问题

【问题讨论】:

  • 类似WHERE col REGEXP '^.{3,}$' AND col NOT REGEXP '^[0-9]+$' AND col NOT REGEXP '([^$&%@]*[$&%@]){4}' AND col NOT REGEXP '[[:<:]][[:alnum:]_]{11}'

标签: php mysql regex


【解决方案1】:

MySQL 不支持lookarounds,也不支持\d\w 类。你可以这样拆分正则表达式:

SELECT * FROM table WHERE col REGEXP '^.{3,}$' AND col NOT REGEXP '^[0-9]+$' AND col NOT REGEXP '([^$&%@]*[$&%@]){4}' AND col NOT REGEXP '[[:<:]][[:alnum:]_]{11}'

地点:

  • REGEXP '^.{3,}$' - 总长度应为 3 个或更多字符
  • AND col NOT REGEXP '^[0-9]+$' - 字符串不能只包含数字
  • AND col NOT REGEXP '([^$&amp;%@]*[$&amp;%@]){4}' - 字符串不能有 4 个特殊字符
  • AND col NOT REGEXP '[[:alnum:]_]{11}' - 字符串不能包含 11 个字符的单词

【讨论】:

  • 你是最棒的。我推荐你
  • @wiktor Stribizew 你能帮我把下面的正则表达式转换成 MySql 兼容的吗? ^(?:(?:\+|0{0,2})61(\s*[\-]\s*)?|[0]?)?[4]\d{8}$ 提前致谢!
【解决方案2】:

解决方法是使用类似于 preg 的 MySQL UDF 库,其 REGEXP 比原生 MySQL 的更复杂。

https://github.com/mysqludf/lib_mysqludf_preg

您可以在下面的链接中键入以上内容,以获取将直接与 udf 一起使用的 Perl 版本的表达式

https://regex101.com/r/wU8uM7/22/codegen?language=javascript

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多