我试图运行下面的查询来从字符串中获取子字符串,但它给出了错误的结果。我不知道如何使用正则表达式,因为我使用的正则表达式可以很好地与PCRE配合使用。
SELECT REGEXP_SUBSTR(
'Wireless-Interface-APName-ndehqb-a3g4-a10-slotId-1'
, '.*-APName-(.*)-slotId.*'
)
在这种情况下,我希望得到ndehqb-a3g4-a10
,但它会打印原始字符串本身。任务是获取与-APName-
和-slotId-
之间的任何内容匹配的子字符串
更新
由于Vertica的正则表达式函数使用PCRE,因此使用其他相关标签对此进行标记。
您不是要获取整个模式(即整个输入字符串(,而是要获取圆括号中捕获的第一个子表达式。
这让调用变得有点复杂——我总是要在文档中查找它,因为我似乎永远无法记住所有可能的参数及其顺序。
以下是我对它的称呼,带有注释参数:
SELECT
REGEXP_SUBSTR(
'Wireless-Interface-APName-ndehqb-a3g4-a10-slotId-1' -- in string
, '.*-APName-(.*)-slotId.*' -- pattern
, 1 -- search start position
, 1 -- occurrence
, '' -- modifier
, 1 -- captured subexp number
) AS captured_subexp
;
-- out captured_subexp
-- out -----------------
-- out ndehqb-a3g4-a10