我有一个应用程序GUI,允许您输入IP范围并执行查询以提取仅具有属于该范围内的clientIP的记录。我一直在努力自动化这个功能,并且大部分都在工作,但我很难理解regex_subst语法。这是我从Oracle会话中提取的查询的一部分,我想要使用IP硬编码或通过变量插入值。
AND REGEXP_LIKE(m.CLIENTIP, '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$')
AND CAST(REGEXP_SUBSTR(m.CLIENTIP,'[0-9]{1,3}',1, 4) AS NUMBER) BETWEEN :22 AND :23 AND CAST(REGEXP_SUBSTR(m.CLIENTIP,'[0-9]{1,3}',1, 3) AS NUMBER) BETWEEN :24 AND :25
AND CAST(REGEXP_SUBSTR(m.CLIENTIP,'[0-9]{1,3}',1, 2) AS NUMBER) BETWEEN :26 AND :27 AND CAST(REGEXP_SUBSTR(m.CLIENTIP,'[0-9]{1,3}',1) AS NUMBER) BETWEEN :28 AND :29)
如果我想在10.35.0.0之间找到记录 - > 10.35.255.255,这些值会在哪里插入上面的语法?
答案 0 :(得分:1)
REGEXP_SUBSTR(m.CLIENTIP,'[0-9] {1,3}',1,2)表示提取一组1-3个数字,从第1位开始搜索并匹配第2该群体的发生。
所以,如果你的m.CLIENTIP是10.35.23.12,
REGEXP_SUBSTR(m.CLIENTIP,'[0-9]{1,3}',1, 4)
将提取12 REGEXP_SUBSTR(m.CLIENTIP,'[0-9]{1,3}',1, 3)
将提取23 REGEXP_SUBSTR(m.CLIENTIP,'[0-9]{1,3}',1, 2)
将提取35 REGEXP_SUBSTR(m.CLIENTIP,'[0-9]{1,3}',1)
将提取10(此处省略第四个参数,默认情况下视为1)要回答您的问题,