【问题标题】:Mariadb: Regexp_substr not working with non-matching group regular expressionMariadb:Regexp_substr 不适用于不匹配的组正则表达式
【发布时间】:2017-12-06 08:43:09
【问题描述】:

我正在使用查询从包含文本的列中提取用户 ID。这适用于我正在使用的论坛系统,并希望从包含完整消息的文本字段中获取用户 ID 部分。我正在使用的查询是

SELECT REGEXP_SUBSTR(message, '(?:member: )(\d+)' ) AS user_id from posts where message like '%quote%';

现在忽略丑陋的 SQL 而不是最终的事实,我只需要到达它读取用户 ID 的地方。以下是您将在消息列中看到的文本示例

`QUOTE="Moony, post: 967760, member: 22665"]I'm underwhelmed...[/QUOTE]

Hopefully we aren’t done yet and this is nothing but a depth signing!`

在 mariadb REGEXP_SUBST 中使用的正则表达式有什么不同吗?这应该是 PCRE 并且在正则表达式测试器中工作并且应该正确读取。它应该寻找组“成员:”,然后获取之后的数字,并在所有这些帖子上进行一次匹配。

【问题讨论】:

  • 我不明白你为什么将字符串 member: 分组,因为它可能是非捕获的。
  • 看来你想要'(?<=member: )\d+'
  • @WiktorStribiżew (?<=member: )\d+ 提供相同的结果,即为空。如果我在regex101.com 上测试你的正则表达式和我的正则表达式,但一旦它在 SQL 查询中就不行
  • @DanFarrell 我正在对其进行分组,因为这似乎是识别该组数字的最合乎逻辑的搜索分组,因为我不能依赖位置是否一致

标签: regex mariadb


【解决方案1】:

这是一个丑陋的 hack/解决方法,通过对以下 "] 使用前瞻来工作,但是如果帖子中有多个引号,则不会工作

(?<=member: )\.+(?="])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多