我的应用程序由几个微服务组成,我现在正致力于API网关和授权微服务。根据用户执行此活动的权限,将验证和授权每个传入请求。活动由动词(GET,POST,PUT,DELETE)和ENDPOINT(/ interpretations / q44nAj91aH6nd /)组成
我有一个列出所有活动的MySQL表,并希望将用户的请求端点与表中的匹配活动(行)相匹配。
limit
我的问题是,如何匹配此请求的端点的第2行: CREATE TABLE `activities` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`url` varchar(255) NOT NULL DEFAULT '',
`method` varchar(20) NOT NULL DEFAULT 'GET',
`url_regex` varchar(255) DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `activities` (`id`, `url`, `method`, `url_regex`)
VALUES
(1,'/interpretations/','POST',''),
(2,'','GET','/interpretations/[a-Z0-9]+/');
(应与正则表达式模式/interpretations/q44nAj91aH6nd/
匹配)。
当我尝试以下操作时,它不起作用:
/interpretations/[a-Z0-9]+/
答案 0 :(得分:1)
在MySQl中,正则表达式模式出现在RLIKE和之前的输入数据之后,因此:
SELECT * FROM `activities` WHERE "/interpretations/q44nAj91aH6nd/" RLIKE `url_regex`;
PS,你的正则表达式在字符范围内有语法错误。试试这个:
/interpretations/[a-zA-Z0-9]+/
首先测试你的正则表达式,将输入和模式作为直字符串传递:
SELECT * FROM `activities` WHERE '/interpretations/q44nAj91aH6nd/' RLIKE '/interpretations/[a-Z0-9]+/';
给出“无效字符范围”。您在查询中看不到这一点,因为模式错误不会暂停查询,只会删除行
上提供了一些测试/演示答案 1 :(得分:0)
RLIKE
关心参数的顺序。尝试:
SELECT *
FROM `activities`
WHERE '/interpretations/q44nAj91aH6nd/' RLIKE url_regex;
将正则表达式更改为:
INSERT INTO `activities` (`id`, `url`, `method`, `url_regex`)
VALUES (1, '/interpretations/', 'POST', ''),
(2, '', 'GET', '/interpretations/[a-zA-Z0-9]+/');
Here是一个SQL小提琴。