Ale*_*exG 10 regex sql postgresql
如何从SQL select中返回匹配的正则表达式?我尝试使用REGEXP_EXTRACT没有运气(功能不可用).我所做的工作是:
SELECT column ~ '^stuff.*$'
FROM table;
Run Code Online (Sandbox Code Playgroud)
但这给了我一个真/假的清单.我想知道每种情况下提取的是什么.
Ham*_*one 18
如果你试图捕获由表达式产生的正则表达式匹配,那么substring就可以做到这一点:
select substring ('I have a dog', 'd[aeiou]g')
Run Code Online (Sandbox Code Playgroud)
会返回任何比赛,在这种情况下是"狗".
我认为你上面尝试的缺失的链接是你需要将你想要捕获的表达式放在括号中. regexp_matches在这种情况下会工作(如果您在要捕获的表达式周围包括括号),但会返回每个匹配的文本数组.如果是一场比赛,那就substring方便了.
所以,回到你的例子,如果你试图返回stuff当且仅当它在列的开头:
select substring (column, '^(stuff)')
Run Code Online (Sandbox Code Playgroud)
要么
select (regexp_matches (column, '^(stuff)'))[1]
Run Code Online (Sandbox Code Playgroud)
SELECT regexp_matches(column,'^stuff.*$')
FROM table
Run Code Online (Sandbox Code Playgroud)
regexp_matches函数返回所有捕获的子字符串的文本数组,这些字符串是由匹配POSIX正则表达式模式产生的。它具有语法regexp_matches(string,pattern [,flags])。该函数不能返回任何行,一行或多行(请参见下面的g标志)。如果模式不匹配,则该函数不返回任何行。如果该模式不包含带括号的子表达式,则返回的每一行都是一个单元素文本数组,其中包含与整个模式匹配的子字符串。如果该模式包含带括号的子表达式,则该函数返回一个文本数组,该数组的第n个元素是与该模式的第n个带括号的子表达式匹配的子字符串(不计入“非捕获”括号;有关详细信息,请参见下文)。flags参数是一个可选的文本字符串,其中包含零个或多个更改功能行为的单字母标志。标志g使函数查找字符串中的每个匹配项,而不仅是第一个匹配项,并为每个此类匹配项返回一行。
我正在使用 Amazon Redshift,它使用 PostgreSQL 8.0.2(我应该在问题中提到这一点)。对我来说有效的是REGEXP_SUBSTR
例如
SELECT REGEXP_SUBSTR(column,'^stuff.*$')
FROM table
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12037 次 |
| 最近记录: |