MySQL 提供REGEXP 又名 RLIKE来匹配正则表达式。
我如何列出比赛的位置?
例如,对于包含内容的表
X | Y
--------+---------------
abcd | abaab
efgh | ababbaaabaaaab
我希望能够编写一些将Y
和aa*b
作为参数并返回aa*b
column中正则表达式的所有匹配项的内容Y
,如下所示:
X | POS | LEN
--------+-------+-------
abcd | 1 | 2
abcd | 2 | 2
efgh | 1 | 2
efgh | 3 | 2
efgh | 6 | 4
efgh | 10 | 5
如何才能做到这一点?
到目前为止,我能想到的最好的方法是一个肮脏的解决方法:尝试匹配每个可能的子字符串,就像这里完成的那样,并基于此生成多个结果,或者通过使用存储过程,或者通过生成和执行 INSERT 语句。
有没有更明智的方法来做到这一点?
MySQL 8.0为此具有REGEXP_INSTR()。
早期版本的 MySQL 没有这个功能。
最常见的解决方法是返回查询结果,包括与您的正则表达式匹配的完整字符串 - 不知道它匹配的位置 - 并使用您喜欢的应用程序语言中的一些功能更丰富的文本匹配函数来查找位置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句