首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >选择中的PostgreSQL正则表达式捕获组

选择中的PostgreSQL正则表达式捕获组
EN

Stack Overflow用户
提问于 2017-01-23 16:53:13
回答 3查看 30.7K关注 0票数 29

如何从SQL select返回匹配的正则表达式?我尝试使用REGEXP_EXTRACT而没有运气(函数不可用)。我所做的工作就是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT column ~ '^stuff.*$'
FROM table;

但这给了我一个正确/错误的列表。我想知道在每一种情况下提取了什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-23 17:57:08

如果您试图捕获表达式所产生的regex匹配,那么substring将完成以下任务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select substring ('I have a dog', 'd[aeiou]g')

将返回任何匹配,在这种情况下“狗”。

我认为您在上面尝试的缺少的环节是,您需要将要捕获的表达式放在括号中。在这种情况下,regexp_matches可以工作(如果在要捕获的表达式周围加上括号),但是会返回每个匹配的文本数组。如果是一次匹配,substring就有点方便了。

因此,回到您的示例,如果您试图返回stuff,则必须是在列的开头:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select substring (column, '^(stuff)')

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select (regexp_matches (column, '^(stuff)'))[1]
票数 43
EN

Stack Overflow用户

发布于 2017-01-23 16:56:36

使用regexp_matches

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT regexp_matches(column,'^stuff.*$')
FROM table

regexp_matches函数返回由于匹配POSIX正则表达式模式而捕获的所有子字符串的文本数组。它有语法regexp_matches(字符串、模式、标志)。函数不能返回任何行、一行或多行(请参见下面的g标志)。如果模式不匹配,则函数不返回任何行。如果模式不包含括号大小的子表达式,那么返回的每一行都是一个包含匹配整个模式的子字符串的单元素文本数组。如果模式包含括号大小的子表达式,则函数返回一个文本数组,其n‘the元素是匹配该模式的n’the括号大小的子表达式的子字符串(不包括“非捕获”括号;详见下文)。标志参数是一个可选的文本字符串,包含零个或多个单字母标志,这些标志可以更改函数的行为。标志g使函数查找字符串中的每个匹配项,而不仅仅是第一个匹配项,并为每个此类匹配返回一行。

票数 9
EN

Stack Overflow用户

发布于 2017-01-24 09:57:33

我使用的是Amazon,它使用PostgreSQL 8.0.2 (我应该在问题中提到这一点)。对我来说,起作用的是REGEXP_SUBSTR

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT REGEXP_SUBSTR(column,'^stuff.*$')
FROM table
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41818279

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文