如何从SQL select返回匹配的正则表达式?我尝试使用REGEXP_EXTRACT
而没有运气(函数不可用)。我所做的工作就是:
SELECT column ~ '^stuff.*$'
FROM table;
但这给了我一个正确/错误的列表。我想知道在每一种情况下提取了什么。
发布于 2017-01-23 17:57:08
如果您试图捕获表达式所产生的regex匹配,那么substring
将完成以下任务:
select substring ('I have a dog', 'd[aeiou]g')
将返回任何匹配,在这种情况下“狗”。
我认为您在上面尝试的缺少的环节是,您需要将要捕获的表达式放在括号中。在这种情况下,regexp_matches
可以工作(如果在要捕获的表达式周围加上括号),但是会返回每个匹配的文本数组。如果是一次匹配,substring
就有点方便了。
因此,回到您的示例,如果您试图返回stuff
,则必须是在列的开头:
select substring (column, '^(stuff)')
或
select (regexp_matches (column, '^(stuff)'))[1]
发布于 2017-01-23 16:56:36
SELECT regexp_matches(column,'^stuff.*$')
FROM table
regexp_matches函数返回由于匹配POSIX正则表达式模式而捕获的所有子字符串的文本数组。它有语法regexp_matches(字符串、模式、标志)。函数不能返回任何行、一行或多行(请参见下面的g标志)。如果模式不匹配,则函数不返回任何行。如果模式不包含括号大小的子表达式,那么返回的每一行都是一个包含匹配整个模式的子字符串的单元素文本数组。如果模式包含括号大小的子表达式,则函数返回一个文本数组,其n‘the元素是匹配该模式的n’the括号大小的子表达式的子字符串(不包括“非捕获”括号;详见下文)。标志参数是一个可选的文本字符串,包含零个或多个单字母标志,这些标志可以更改函数的行为。标志g使函数查找字符串中的每个匹配项,而不仅仅是第一个匹配项,并为每个此类匹配返回一行。
发布于 2017-01-24 09:57:33
我使用的是Amazon,它使用PostgreSQL 8.0.2 (我应该在问题中提到这一点)。对我来说,起作用的是REGEXP_SUBSTR
例如:
SELECT REGEXP_SUBSTR(column,'^stuff.*$')
FROM table
https://stackoverflow.com/questions/41818279
复制相似问题