【发布时间】:2011-01-17 08:36:07
【问题描述】:
我需要编写一个正则表达式才能匹配以下模式:
IF:en0
IF:en0:10.94.80.78
IF:en11
IF:en11:10.94.80.78
我用PL SQL写的正则表达式是
IF REGEXP_LIKE(input_str,
'^IF:en([0-9])([:]?)((25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2})$') then
DBMS_OUTPUT.PUT_LINE('Match');
END IF;
这很好用。但我想知道是否有一种方法可以制作 ip 地址的模式
((25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2})
作为上面的变量并使用类似
ipaddrpattern :=
'((25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2})';
IF REGEXP_LIKE(input_str,
'^IF:en([0-9])([:]?)||ipaddrpattern||$') then
DBMS_OUTPUT.PUT_LINE('Match');
END IF;
我尝试了上述方法,但没有成功。有人可以帮我语法吗?
【问题讨论】:
-
您是否有理由必须验证所有八位字节在 SQL 本身中是否有效?似乎只使用一个更基本的模式会更有意义,该模式可以匹配每个八位字节中的任何 1-3 位数字,而是在数据进入数据库之前对其进行验证。
标签: regex plsql ip-address