Oracle regexp_substr - 从字符串中提取子字符串有不同的格式

问题描述 投票:1回答:1

我有一个字符串,有不同的格式,如下所示:

UserId=1;IP Address=85.154.221.54;Device Type=Chrome57
Device Type=Chrome57;IP Address=85.154.221.54
Device Type=Chrome57

如果没有匹配,如何提取IP地址并返回空字符串?

我尝试了以下内容,但如果没有匹配则返回字符串本身。

select regexp_replace('Error=0;UserId=-1;IP Address=85.154.221.54;Device Type=Chrome57', '.*IP Address=(.+);.*', '\1') from dual;
sql regex database oracle
1个回答
1
投票

您可以使用REGEXP_SUBSTR和稍微改进的模式:

select regexp_substr('Error=0;UserId=-1;IP Address=85.154.221.54;Device Type=Chrome57',
                     'IP Address=([0-9.]+)',
                     1, 1, NULL, 1
                    )
from dual

这里,

  • IP Address= - 匹配IP Address=
  • ([0-9.]+) - 匹配并捕获第1组一个或多个数字或/和.

看到online demo。如果没有匹配,则输出将为NULL。

select regexp_substr('Error=0;UserId=-1;IP Address=85.154.221.54;Device Type=Chrome57',
                     'IP Address=([0-9.]+)',
                     1, 1, NULL, 1
                    ) as Result
from dual
-- => 85.154.221.54
--select regexp_substr('Error=0;UserId=-1;IP Address= Device Type=Chrome57', 'IP Address=([0-9.]+)', 1, 1, NULL, 1) as result from dual
-- => NULL

enter image description here

请注意,1函数的最后一个REGEXP_SUBSTR参数返回捕获组#1的内容(使用模式的第一个带括号的部分捕获的文本)。

© www.soinside.com 2019 - 2024. All rights reserved.