将行首是IP地址的行筛选出来,并截取。
CREATE VOLATILE TABLE test(
ip VARCHAR(100)
) ON COMMIT PRESERVE ROWS;
INSERT INTO test VALUES('0.0.0.0:');
INSERT INTO test VALUES( '192.168.0.1, ths,');
INSERT INTO test VALUES('H_12.2.3.8.uj, ijish');
SEL REGEXP_SUBSTR(ip, '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}',1,1,'i') ip
FROM test
WHERE REGEXP_SIMILAR(ip, '((1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.)|([1-9][0-9]\.)|([0-9]\.)){3}((1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]) |([1-9][0-9]) |([0-9])).*') = 1
运行结果是:
1 192.168.0.1
2 0.0.0.0
用到的正则语法有:
{1,3}匹配次数最少一次,最多三次
. 匹配除换行符 \n 之外的任何单字符
\ 转义字符
[0-9]任意一个数字
- 匹配前面的子表达式零次或多次