REGEXP_SUBSTR
返回字符串内与正则表达式匹配的子字符串。如果没有找到匹配项,REGEXP_SUBSTR 将返回 NULL。这与空字符串不同,如果正则表达式匹配零长度的字符串,则会返回空字符串。
此函数使用默认区域设置对 UTF-8 字符串进行操作,即使区域设置设置为其他方式。
重要
如果要从 Oracle 数据库转移正则表达式查询,请记住 Oracle 将零长度字符串视为等同于 NULL,而 Vertica 却不会这样。语法
REGEXP_SUBSTR ( string-expression, pattern
[, position [, occurrence [, regexp‑modifier [, captured‑subexp ]]... ]] )
参数
-
string-expression
VARCHAR
或LONG VARCHAR
表达式,用于评估在模式中指定的正则表达式是否匹配。如果字符串表达式位于在 Flex 表或列式表的__raw__
列中,则在搜索模式之前将字符串转换为LONG VARCHAR
。- 模式
与字符串表达式匹配的正则表达式。正则表达式必须符合 Perl 正则表达式语法。
- position
- 函数应该从自字符串开头算起的多少个字符开始搜索匹配项。默认情况下,函数从第一个(最左侧)字符开始搜索匹配项。如果将此参数设置为大于 1 的值,将从您指定的第 n 个字符开始搜索匹配项。
默认值: 1
- occurrence
- 控制要返回字符串中第几次出现的模式匹配项。默认情况下,函数返回第一个匹配子字符串的位置。使用此参数可以查找后续匹配子字符串的位置。例如,如果将此参数设置为 3,将返回与模式匹配的第三个子字符串的位置。
默认值: 1
- regexp‑modifier
[可选] 一个或多个单字符标志,可修改正则表达式模式与字符串表达式匹配的方式:
-
b
: 将字符串视为二进制八位字节数,而不是 UTF-8 字符。 -
c
(默认值): 强制匹配区分大小写。 -
i
: 强制匹配不区分大小写。 -
m
: 将要匹配的字符串视为多行。使用此修饰符,可使行头 (^
) 和行尾 ($)
的正则表达式运算符与字符串内的换行符 (\n
) 相匹配。如果没有m
修饰符,行头和行尾运算符仅与字符串的开头和结尾相匹配。 -
n
: 将正则表达式运算符 (.
) 与换行符 (\n
) 相匹配。默认情况下,.
运算符可与除换行符以外的任何字符相匹配。 -
x
: 将注释添加到正则表达式。x
修饰符可导致函数忽略正则表达式中所有未经转义的空格字符和注释。注释以哈希 (#
) 字符开始,以换行符 (\n
) 结束。在字符串中匹配的正则表达式中的所有空格都必须使用反斜杠 (\\
) 字符进行转义。
-
- captured‑subexp
- 要返回其位置的括住的子表达式。默认情况下,函数将返回 string 中与正则表达式匹配的第一个字符的位置。如果将此值设置为从 1 到 9,函数将返回由正则表达式中相应的一组圆括号括住的子表达式。例如,如果将此值设置为 3,将返回由正则表达式中第三组圆括号括住的子字符串。
默认值: 0
注意
子表达式按左括号的出现位置从左到右编号,与嵌套的正则表达式一样。例如,在正则表达式\s*(\w+\s+(\w+))
中,子表达式 1 包括了除前导空格之外的所有文本。
示例
选择以 thy
结尾的第一个字母子字符串。
=> SELECT REGEXP_SUBSTR('healthy, wealthy, and wise','\w+thy');
REGEXP_SUBSTR
---------------
healthy
(1 row)
选择从字符串中的第二个字符开头并以 thy
结尾的第一个字母子字符串。
=> SELECT REGEXP_SUBSTR('healthy, wealthy, and wise','\w+thy',2);
REGEXP_SUBSTR
---------------
ealthy
(1 row)
选择以 thy
结尾的第二个字母子字符串。
=> SELECT REGEXP_SUBSTR('healthy, wealthy, and wise','\w+thy',1,2);
REGEXP_SUBSTR
---------------
wealthy
(1 row)
返回捕获的第三个子表达式的内容,该子表达式将捕获字符串中的第三个词。
=> SELECT REGEXP_SUBSTR('one two three', '(\w+)\s+(\w+)\s+(\w+)', 1, 1, '', 3);
REGEXP_SUBSTR
---------------
three
(1 row)