【问题标题】:RegEx match for different data format [duplicate]RegEx匹配不同的数据格式[重复]
【发布时间】:2021-05-07 19:48:03
【问题描述】:

我正在使用下面的正则表达式从访问列表中提取信息

^\s*[0-9][0-9]\s*(?P(\S+))\s*(?P(\S+))\s*(?P\b(\S+ )/(\S+)\b)\s*(?P(\S+))(?: (eq\s(?P(\S+)))?)

只要数据格式是这样就可以工作

    60 permit tcp 10.33.4.0/22 10.16.129.45 eq https
    70 permit tcp 10.33.16.0/24  10.16.129.45 eq https
    80 permit tcp 10.33.101.0/24  10.16.129.45 eq https

但如果我对下面的数据使用相同的正则表达式,它就不起作用。

    20 permit icmp 10.33.4.0/22  10.16.129.45
    30 permit icmp 10.33.16.0/24 10.16.129.45
    40 permit icmp 10.33.101.0/24 10.16.129.45

是否可以对两者使用相同的正则表达式。

https://regex101.com/r/YtZWWc/1

【问题讨论】:

  • 只需将最后一个非捕获组设为可选(即,在最后添加?)。不过,您有很多不必要的捕获组。

标签: regex


【解决方案1】:

看起来下面的正则表达式有效:

^\s*[0-9][0-9]\s*(?P<action>(\S+))\s*(?P<protocol>(\S+))\s*(?P<source>\b(\S+)/(\S+)\b)\s*(?P<dest>(\S+))(?: (eq\s(?P<port>(\S+))))?

【讨论】:

    猜你喜欢
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多