【发布时间】: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
是否可以对两者使用相同的正则表达式。
【问题讨论】:
-
只需将最后一个非捕获组设为可选(即,在最后添加
?)。不过,您有很多不必要的捕获组。
标签: regex