我有正则表达式
^(?!\d+$)(?!(?:[^$&%@]*[$&%@]){4})(?!.*\b\w{11}).{3,}$
它在PHP中工作正常
我希望转换为MySQL支持的查询。当我跑到正则表达式之上。我从reg-exp
得到错误'重复 - 操作符操作数无效'请帮助解决这个问题
答案 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