【问题标题】:REGEXP_SUBSTR return all matches (mariaDB)REGEXP_SUBSTR 返回所有匹配项(mariaDB)
【发布时间】:2018-10-04 04:37:43
【问题描述】:

我需要在 MariaDB 表的文本字段中获取正则表达式的所有匹配项。据我所知 REGEXP_SUBSTR 是在文本字段中获取正则表达式匹配值的方法,但它总是在第一次匹配后返回,我想得到 所有匹配项

在 MariaDB 中有没有办法做到这一点?

文本字段的内容示例如下:

@Generation {
// 1
True =>
    `CP?:24658` <= `CPV?:24658=57186`;
//`CP?23432:24658` <= `CPV?:24658=57186`

// 2
`CP?:24658` <> `CPV?:24658=57178` =>
    `CP?:24656` <> `CPV?:24656=57169`;

我现在使用的选择表达式是:

选择 REGEXP_SUBSTR(textfield,'CP\\?(?:\\d*:)*24658') 作为 my_match 从表 其中 id = 1243;

目前只返回第一场比赛:

  • CP?:24658

我希望它返回所有匹配项:

  • CP?:24658
  • CP?23432:24658
  • CP?:24658

【问题讨论】:

  • 需要一个可以返回类似结果数组的函数,我不知道 MariaDB 是否有类似的东西。但是,您必须首先在数据库中完成这项工作吗?
  • 是的,这是最快的方法,因为我必须获取数据库中潜在数千条记录的所有匹配项来处理它们。

标签: mariadb regexp-substr


【解决方案1】:
  1. 只使用REGEXP 来查找感兴趣的行。将它们放入临时表中
  2. 重复处理临时表 - 但在使用时删除 SUBSTR

你会对每个 substr 做什么?也许这会帮助我们设计出更好的方法。

【讨论】:

    猜你喜欢
    • 2020-11-03
    • 2012-11-22
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2019-10-10
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多