gpt4 book ai didi

mysql - 如何在 MySQL 字段中存储正则表达式模式并根据它检查输入?

转载 作者:行者123 更新时间:2023-11-29 10:30:10 25 4
gpt4 key购买 nike

我的应用程序由多个微服务组成,我现在正在研究 API 网关和授权微服务。每个传入请求都将根据用户执行此事件的权限进行验证和授权。事件由动词(GET、POST、PUT、DELETE)和端点(/interpretations/q44nAj91aH6nd/)组成

我有一个列出所有事件的 MySQL 表,并且希望将用户请求的端点与表中的匹配事件(行)进行匹配。

    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]+/');

我的问题是,如何匹配此给定请求端点的第 2 行:/interpretations/q44nAj91aH6nd/(应与正则表达式模式 /interpretations/[a-Z0- 9]+/)。

当我尝试以下操作时,它不起作用:

SELECT * FROM `activities` WHERE `url_regex` RLIKE "/interpretations/q44nAj91aH6nd/";

# also tried inverting

SELECT * FROM `activities` WHERE "/interpretations/q44nAj91aH6nd/" RLIKE `url_regex`;

最佳答案

在 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]+/';

给出“无效字符范围”。您在查询中看不到这一点,因为模式错误不会停止查询,它只是删除行

一些测试/演示可在:http://sqlfiddle.com/#!9/82e917/2

关于mysql - 如何在 MySQL 字段中存储正则表达式模式并根据它检查输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47552940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com