我有一个字符串,有不同的格式,如下所示:
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;
您可以使用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
请注意,1
函数的最后一个REGEXP_SUBSTR
参数返回捕获组#1的内容(使用模式的第一个带括号的部分捕获的文本)。