使用 REGEX_SUBSTR 查找子字符串

Finding Substring Using REGEX_SUBSTR

我正在尝试提取 Twitter 和 FortniteFacebook 和 Words with Friends、&[=23= 的子字符串]Expedia 和 Notion 来自以下字符串。这些只是例子,它们之间的共同模式是 "AppNames";s:xx:" 其中 xx 是每个不同的数字字符串。我很难解释不同的数字。这是我当前的 REGEX_SUBSTR 查询,它没有考虑 s:xx 中的不同数值

 REGEXP_SUBSTR(FORM_FIELDS, '"AppNames";s:17:\"([^\"]+)', 1, 1, 'e')

重申一下,上面的查询将输出 Twitter 和 Fortnite,这对于第一个字符串是正确的,但我有许多其他相似但数字模式不同的字符串比如...

字符串

s:25:"Social/Games";s:14:"AppNames";s:17:"Twitter and Fortnite";s:12:"Audience";s:20;}
s:25:"Social/Games";s:14:"AppNames";s:35:"Facebook and Words with Friends";s:12:"Audience";s:20;}
s:15:"Travel/Productivity";s:19:"AppNames";s:50:"Expedia and Notion";s:12:"Audience";s:20;}
with data(FORM_FIELDS) as (
    SELECT * from values
    ('s:25:"Social/Games";s:14:"AppNames";s:17:"Twitter and Fortnite";s:12:"Audience";s:20;}'),
    ('s:25:"Social/Games";s:14:"AppNames";s:35:"Facebook and Words with Friends";s:12:"Audience";s:20;}'),
    ('s:15:"Travel/Productivity";s:19:"AppNames";s:50:"Expedia and Notion";s:12:"Audience";s:20;}')
)
select 
    REGEXP_SUBSTR(FORM_FIELDS, '"AppNames";s:[0-9]+:\"([^\"]+)', 1, 1, 'e') as new
    ,REGEXP_SUBSTR(FORM_FIELDS, '"AppNames";s:17:\"([^\"]+)', 1, 1, 'e') as old
from data;

给出:

NEW OLD
Twitter and Fortnite Twitter and Fortnite
Facebook and Words with Friends null
Expedia and Notion null

所以 [0-9]+ 将匹配 1+ 个数字,你也可以使用 \d+ 但如果你只想要 2 \d{2} 将强制匹配。