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

Oracle regular expression for number range and length

我需要验证给定的 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