【问题标题】:How do I create a regex for ipaddress to be used with other patterns in PL SQL如何为 ipaddress 创建一个正则表达式以与 PL SQL 中的其他模式一起使用
【发布时间】: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


【解决方案1】:

您可能想要连接您的模式 :)
使用

'^IF:en([0-9])([:]?)' || ipaddrpattern || '$') then

而不是

'^IF:en([0-9])([:]?)||ipaddrpattern||$') then

您当前的实现将匹配

'IF:en1ipaddrpattern'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多