正则表达式匹配包含两个字符组的字符串一定次数

时间:2016-10-19 17:32:00

标签: mysql regex

我需要一个正则表达式来匹配包含以下内容的字符串:

  • 至少3次“ ab
  • 至少2次“ cd

匹配字符串的示例:

XYZ的 AB 1的 CD -f的 AB 0的 AB _ CD < / p>

我想在MySQL查询中使用regexp,如下所示:

SELECT name FROM table WHERE name REGEXP'...'

谢谢

1 个答案:

答案 0 :(得分:0)

这会计算&#39; ab&#39;(

)的次数(非重叠)次数
SELECT CHAR_LENGTH(str) - CHAR_LENGTH(REPLACE(str, 'ab', 'x')) FROM ...

注意:

  • CHAR_LENGTH计算字符数,LENGTH计算字节数;可能这种区别是无关紧要的。
  • 该示例适用于任何2-char搜索字符串。对于3字符,替换为2字符替换等:

    ... REPLACE(str, '1234567', 'abcdef') ...

  • 而不是那样,你可以分开:

    SELECT ( CHAR_LENGTH(str) - CHAR_LENGTH(REPLACE(str, 'ab', '')) ) / CHAR_LENGTH('ab') FROM ...

要查找至少包含3个副本的行:

SELECT * FROM t
    WHERE ( ... ) >= 3