在 Oracle REGEXP_SUBSTR 中验证子表达式
Validating subexpression in Oracle REGEXP_SUBSTR
甲骨文 12cR1
我有一列包含如下所示的冗长字符串
:Key1:Value1:Key2:Value2:Key3:Value3:Key4...…..
密钥是唯一的数字。这些值是任何字符串值,甚至可以是与任何其他键相同的数字。如果我给一个键,我必须得到它对应的值。例如,
lengthy_str_col := ':101:abc:12:43:43:101.4:4:bus'
为了获取键值 43,我尝试了以下操作。
SELECT REGEXP_SUBSTR(lengthy_str_col,'(:([^:])+)(:[^:]+)') FROM DUAL;
这给了我第一个键值对 ':1:abc'
。现在我知道 43 是第三个键,我使用
SELECT REGEXP_SUBSTR(lengthy_str_col,'(:([^:])+)(:[^:]+)', 1, 3, 'i', 4) FROM DUAL;
获取键 43
的值 101.4
。
但所需的密钥可以在任何随机位置。有没有办法获取任何给定键的值?
您可以使用
select REGEXP_SUBSTR(':101:abc:12:43:43:101.4:4:bus', '^(:[^:]+:[^:]+)*?:43:([^:]+)', 1, 1, NULL, 2) as Result from dual
见this regex demo and this regex graph:
说明
^
- 字符串的开头
(:[^:]+:[^:]+)*?
- 零次或多次重复 :
和除 :
以外的 1+ 个字符
:43:
- 冒号之间的键
([^:]+)
- 第 2 组(结果):除 :
以外的 1 个或多个字符
甲骨文 12cR1
我有一列包含如下所示的冗长字符串
:Key1:Value1:Key2:Value2:Key3:Value3:Key4...…..
密钥是唯一的数字。这些值是任何字符串值,甚至可以是与任何其他键相同的数字。如果我给一个键,我必须得到它对应的值。例如,
lengthy_str_col := ':101:abc:12:43:43:101.4:4:bus'
为了获取键值 43,我尝试了以下操作。
SELECT REGEXP_SUBSTR(lengthy_str_col,'(:([^:])+)(:[^:]+)') FROM DUAL;
这给了我第一个键值对 ':1:abc'
。现在我知道 43 是第三个键,我使用
SELECT REGEXP_SUBSTR(lengthy_str_col,'(:([^:])+)(:[^:]+)', 1, 3, 'i', 4) FROM DUAL;
获取键 43
的值 101.4
。
但所需的密钥可以在任何随机位置。有没有办法获取任何给定键的值?
您可以使用
select REGEXP_SUBSTR(':101:abc:12:43:43:101.4:4:bus', '^(:[^:]+:[^:]+)*?:43:([^:]+)', 1, 1, NULL, 2) as Result from dual
见this regex demo and this regex graph:
说明
^
- 字符串的开头(:[^:]+:[^:]+)*?
- 零次或多次重复:
和除:
以外的 1+ 个字符
:43:
- 冒号之间的键([^:]+)
- 第 2 组(结果):除:
以外的 1 个或多个字符