首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >捕获mysql regexp中的组

捕获mysql regexp中的组
EN

Stack Overflow用户
提问于 2020-08-14 04:14:56
回答 1查看 72关注 0票数 1

我有一个包含varchar列的表,该列表示一个路径。我想搜索路径遵循类似name.name[*]这样的模式的行,其中名称可以是任何东西。我正在查找path列中任何位置包含的重复字符串,这些字符串由句点分隔,后面有一个方括号。

这似乎需要Regexp,所以通过python我得到了类似于https://regex101.com/r/apS20a/4的东西

然而,尝试用MySQL正则表达式来实现它是行不通的。我已经能够将速记翻译成REGEXP '(A-Za-z_+).(\1[0-9+])',但似乎MySql正则表达式不支持捕获组。有没有办法用mysql regexp来完成我想要做的事情?谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-08-14 04:31:51

我不认为MySQL支持捕获组。但是,如果在第一个.和第一个[之间的字符串中只有一个.name[示例,那么您可以绕过它。这不是一般的解决方案,在这种情况下只是一种特定的方法。

您可以使用以下命令获取名称:

代码语言:javascript
运行
复制
select substring_index(substring_index(url, '[', 1), '.', -1) as name

然后将其合并到正则表达式中:

代码语言:javascript
运行
复制
select t.*
from (select t.*,
             substring_index(substring_index(url, '[', 1), '.', -1) as name
      from t
     ) t
where url like concat('%', name, '.', name, '[%');

这里只使用like而不是regexp,因为[.是正则表达式通配符。当然,这假设名称没有_%

编辑:

这里有一个方法,它可以实际识别这种情况发生的时间--即使有多种模式也能正常工作。

其思想是基于.[之间发生的事情构造正则表达式--然后应用它。令人愉悦的自我参照:

代码语言:javascript
运行
复制
select t.*,
       (url regexp regex)
from (select t.*,
             substr(regexp_replace(url, '[^.]*[.]([^\\[]*)\\[[^.]*', '|$1[.]$1\\\\['), 2) as regex
      from (select 'abcde.de[12345.345[ABC' as url union all
            select 'abcdefdef[[[[..123.124['
           ) t
     ) t;

在db<>fiddle中,Here是上面的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63402610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档