以相反的方式通过字符串查找正则表达式模式



我在数据库中存储了一堆正则表达式模式,并有一个字符串作为输入。我的目标是找到与给定字符串匹配的确切模式。因此,它与regex通常的用途有点相反。目前,我正在从DB中获取所有模式,并逐一检查它们是否与接收到的字符串匹配。我想知道是否有可能在SQL 中找到匹配项

例如:

输入字符串:

'/user/profile/AxuI1dn/messages'

DB中的regex数组:

'^/user/stories/[A-Za-z0-9]{5,7}$'
'^/user/profile/[0-9]{1,5}/$'
'^/user/profile/[A-Za-z0-9]{5,7}/messages$'
'^/user/messages/([^s]+)/$'
'^/user/profile/[0-9]{1,5}/photos/[A-Za-z0-9]{5,7}$'
...

这里的预期结果是

'^/user/profile/[A-Za-z0-9]{5,7}/messages$'

您只需使用string REGEXP regexcolumn即可完成此操作。例如:

create table regexes (id int auto_increment primary key,
regex varchar(50))
;
insert into regexes (regex) values
('^/user/stories/[A-Za-z0-9]{5,7}$'),
('^/user/profile/[0-9]{1,5}/$'),
('^/user/profile/[A-Za-z0-9]{5,7}/messages$'),
('^/user/messages/([^s]+)/$'),
('^/user/profile/[0-9]{1,5}/photos/[A-Za-z0-9]{5,7}$')
;
SELECT *
FROM regexes 
WHERE '/user/profile/AxuI1dn/messages' regexp regex

输出:

id  regex
3   ^/user/profile/[A-Za-z0-9]{5,7}/messages$

dbfiddle 演示

相关内容

  • 没有找到相关文章