mysql - 使用 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 甚至不支持捕获组,所以我我有点难过)。
解决方案
如果您使用不支持 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 |
+--------+
如果您感兴趣的参数的位置不固定,即不总是第一个,或者如果后面的参数是可选的并且可能不存在,这有点棘手,您必须添加更多逻辑。
推荐阅读
- r - 使用 Rvest 从多个页面中抓取文本、表格并将两者结合起来
- python - Python:如何使用更少的行来优化列表结果?这个问题已经用 zip 回答了
- python - ValueError:一个操作对梯度有“无”。请确保您的所有操作都定义了渐变
- flutter - 如何在 Flutter 中调整图像或小部件的色相饱和度和亮度?
- jquery - 从文本字段中获取输入并将其转换为另一行的 url slug
- node.js - Node js 对“FFI 模块”的支持
- excel - Excel VBA IE 与 XMLHTTP 差异
- c++ - 如何使用 C++ 在 Windows 10 中捕获 D3D 窗口
- c++ - Windows 可执行文件在我的 linux 上执行
- javascript - E.js 模板:意外的标记 'else'