Sql 用于数字范围和长度的Oracle正则表达式

Sql 用于数字范围和长度的Oracle正则表达式,sql,regex,validation,oracle11g,Sql,Regex,Validation,Oracle11g,我需要验证给定的ip地址列表。 ip地址应在1.0.0.0到255.255.255.255之间 以下是我迄今为止所做的工作: WITH T(VAL) AS ( SELECT '123.1235.231.234.12' FROM dual UNION ALL SELECT '123123' FROM dual UNION ALL SELECT '011' FROM dual UNION ALL SELECT '011.' FRO

我需要验证给定的ip地址列表。 ip地址应在1.0.0.0到255.255.255.255之间

以下是我迄今为止所做的工作:

WITH T(VAL) AS
     ( SELECT '123.1235.231.234.12' FROM dual
     UNION ALL
     SELECT '123123' FROM dual
     UNION ALL
     SELECT '011' FROM dual
     UNION ALL
     SELECT '011.' FROM dual
     UNION ALL
     SELECT '000.' FROM dual
     UNION ALL
     SELECT '123123' FROM dual
     UNION ALL
     SELECT '192.168.1.65' FROM dual
     UNION ALL
     SELECT '255.256.1.65' FROM dual
     )
SELECT *
FROM t
WHERE REGEXP_LIKE(VAL,'^[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$')
 AND REGEXP_SUBSTR(VAL, '[1-9]{1,3}',1,1) BETWEEN 1 AND 255
 AND regexp_substr(val, '[0-9]{1,3}',1,2) BETWEEN 0 AND 255
 AND REGEXP_SUBSTR(VAL, '[0-9]{1,3}',1,3) BETWEEN 0 AND 255
 AND REGEXP_SUBSTR(VAL, '[0-9]{1,3}',1,4) BETWEEN 0 AND 255
它与我测试的数据配合得很好。 如果我能用简单正则表达式做同样的事情,请帮助我


提前感谢:)

您的正则表达式中有一个错误,例如,它与
10.0.0.0
不匹配

将其更改为:

'^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$'

下面的测试将拒绝
0.0.0.0

我发现
^([0-9]{1,3}\){3}[0-9]{1,3}$
更干净,而不是重复相同的模式3次。@ajmalmhd04:这些情况会被拒绝,同时存在第二个条件:
REGEXP_SUBSTR(VAL,[1-9]{1,3}',1,1)介于1和255之间。