如何在MySQL中返回REGEXP匹配

时间:2018-03-06 20:02:23

标签: mysql regex

MySQL提供REGEXP a.k.a. RLIKE来匹配正则表达式。

如何列出比赛的位置?

例如,对于包含内容的表

X       | Y
--------+---------------
abcd    | abaab
efgh    | ababbaaabaaaab

我希望能够编写以Yaa*b作为参数的内容,并返回列aa*b中正则表达式Y的所有匹配项,如下所示:

X       | POS   | LEN
--------+-------+-------
abcd    | 1     | 2
abcd    | 2     | 2
efgh    | 1     | 2
efgh    | 3     | 2
efgh    | 6     | 4
efgh    | 10    | 5

如何做到这一点?

到目前为止,我能想到的最好的是一个肮脏的解决方法:尝试匹配每个可能的子字符串,就像完成here一样,并基于此,生成多个结果,by using a stored procedure或{ {3}}

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

MySQL 8.0为此提供了REGEXP_INSTR()

早期版本的MySQL没有这个功能。

最常见的解决方法是返回查询结果,包括与正则表达式匹配的完整字符串 - 不知道它匹配的位置 - 并使用您喜欢的应用程序语言中的一些功能更丰富的文本匹配函数来查找位置