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