我在数据库中存储了一堆正则表达式模式,并有一个字符串作为输入。我的目标是找到与给定字符串匹配的确切模式。因此,它与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 演示