使用 REGEX_SUBSTR 查找子字符串
Finding Substring Using REGEX_SUBSTR
我正在尝试提取 Twitter 和 Fortnite、Facebook 和 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,这对于第一个字符串是正确的,但我有许多其他相似但数字模式不同的字符串比如...
- "AppNames";s:35
- "AppNames";s:50
- "AppNames";s:44
字符串
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}
将强制匹配。
我正在尝试提取 Twitter 和 Fortnite、Facebook 和 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,这对于第一个字符串是正确的,但我有许多其他相似但数字模式不同的字符串比如...
- "AppNames";s:35
- "AppNames";s:50
- "AppNames";s:44
字符串
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}
将强制匹配。