REGEXP_SUBSTR 从 Vertical SQL 中提取子字符串

REGEXP_SUBSTR to extract a substring from Vertical SQL

我正在尝试 运行 下面的查询以从字符串中获取子字符串,但它给出了错误的结果。我不确定如何使用正则表达式,因为我使用的正则表达式与 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