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
您可以使用
REGEXP_SUBSTR(col, '"xyzVersion" : "([^"]+)"', 1, 1, NULL, 1) as result
备注:
"xyzVersion" : "([^"]+)"
匹配 "xyzVersion" : "
,然后将 "
以外的一个或多个字符捕获到第 1 组中,然后匹配 "
- 最后一个
1
参数告诉 REGEXP_SUBSTR
仅 return 捕获组 1 值(第一个 1
是开始搜索的位置,第二个 1
告诉匹配第一次出现)。
我有这样一个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
您可以使用
REGEXP_SUBSTR(col, '"xyzVersion" : "([^"]+)"', 1, 1, NULL, 1) as result
备注:
"xyzVersion" : "([^"]+)"
匹配"xyzVersion" : "
,然后将"
以外的一个或多个字符捕获到第 1 组中,然后匹配"
- 最后一个
1
参数告诉REGEXP_SUBSTR
仅 return 捕获组 1 值(第一个1
是开始搜索的位置,第二个1
告诉匹配第一次出现)。