REGEXP_SUBSTR - 如何在特定模式后获取特殊字符?

REGEXP_SUBSTR - how to get special characters after specific pattern?

我有这样一个column:

{"abcVersion" : "1.2.3.4", https://klmno.com:5678/def", "xyzVersion" : "6.7.8.9"}

我现在想在模式 xyzVersion" : " 之后得到 numbers.,以便得到 6.7.8.9 作为 result。 我试过这个:

REGEXP_SUBSTR(column, '\d+[^a-z"]+') as result

这显然回馈了 1.2.3.4。我不想用括号内的参数指定位置,而是想在上述模式之后专门获得结果。

我该怎么做?

一个选项是使用 REGEXP_REPLACE()(可能添加 TO_CHAR() 转换以将 CLOB 转换为普通字符串)例如

SELECT TO_CHAR(REGEXP_REPLACE(col,'(.*xyzVersion" : )"(.*)("})','')) AS result
  FROM t     

RESULT
-------
6.7.8.9

Demo

您可以使用

REGEXP_SUBSTR(col, '"xyzVersion" : "([^"]+)"', 1, 1, NULL, 1) as result

备注:

  • "xyzVersion" : "([^"]+)" 匹配 "xyzVersion" : ",然后将 " 以外的一个或多个字符捕获到第 1 组中,然后匹配 "
  • 最后一个 1 参数告诉 REGEXP_SUBSTR 仅 return 捕获组 1 值(第一个 1 是开始搜索的位置,第二个 1 告诉匹配第一次出现)。