将PCRE正则表达式转换为mysql查询正则表达式

时间:2016-03-26 07:40:12

标签: php mysql regex

我有正则表达式

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

它在PHP中工作正常

我希望转换为MySQL支持的查询。当我跑到正则表达式之上。我从reg-exp

得到错误'重复 - 操作符操作数无效'

请帮助解决这个问题

2 个答案:

答案 0 :(得分:2)

MySQL不支持外观,也不支持\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 '([^$&%@]*[$&%@]){4}' - 字符串不能包含4个特殊字符
  • AND col NOT REGEXP '[[:alnum:]_]{11}' - 字符串不能包含11个字符

答案 1 :(得分:0)

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

https://github.com/mysqludf/lib_mysqludf_preg

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

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