首页 > 解决方案 > 使用 REGEXP 在 MySQL 5 中返回特定的捕获组/子字符串

问题描述

我在编写正则表达式来做我需要的 MySQL 语法时遇到了麻烦。

http_referer我在数据库表中的列具有以下值:

https://www.example.com?id=123&true

而且我需要返回查询字符串参数的值uid(在本例中123为 ),以插入另一个查询。

`SELECT * FROM sites WHERE id = (http_referer REGEXP 'uid=([0-9]+)&?')

这是我的查询,它不起作用,可能是因为我试图传递一个 PHP 样式的正则表达式而不是一个 MySQL 可以使用的表达式(但是,我知道 MySQL 甚至不支持捕获组,所以我我有点难过)。

标签: mysqlregex

解决方案


如果您使用不支持 8 版之前的 MySQL REGEXP_REPLACE(),您可以使用SUBSTRING_INDEX()来提取字符串的一部分:

mysql> set @a = 'some.domain?id=123&true';
mysql> select substring_index( substring_index(@a, '?id=', -1), '&', 1) as result;
+--------+
| result |
+--------+
| 123    |
+--------+

如果您感兴趣的参数的位置不固定,即不总是第一个,或者如果后面的参数是可选的并且可能不存在,这有点棘手,您必须添加更多逻辑。


推荐阅读