正则如何实现可选OR匹配,将匹配到的接口信息归入group1组
解决方案
你原有正则的问题是|的优先级作用于整个正则的顶级结构,导致switchport mode access、switchport voice vlan.*两个分支完全脱离了前面的interface匹配逻辑,会单独匹配到配置行,无法关联捕获接口名。
正则写法(JS 语法,需开启g全局匹配、m多行匹配标志)
如果你的需求是将配置中包含以下任意一项的接口名捕获到group1:
switchport access vlan <数字>switchport mode accessswitchport voice vlan <任意内容>
使用以下正则即可:
/(interface [A-Za-z]+\d\/\S+)\n(?:.|\n)*?(?:switchport access vlan\s(\d+)|switchport mode access|switchport voice vlan.*)(?=\n!)/gm
如果你的需求是精确捕获你列出的三个固定接口名到group1,可以直接指定接口编号匹配:
/(interface GigabitEthernet(?:3\/11|2\/[23]))/gm
匹配逻辑说明
- 第一个捕获组
(interface [A-Za-z]+\d\/\S+)匹配接口名称,存入group1 - 非捕获组
(?:.|\n)*?非贪婪匹配接口名之后到目标配置项之前的所有内容 - 第二个非捕获组
(?:switchport access vlan\s(\d+)|switchport mode access|switchport voice vlan.*)是你需要的三个可选匹配逻辑,通过括号包裹保证OR逻辑只作用于这三个规则 - 正向预查
(?=\n!)保证匹配范围限制在当前接口配置块内,不会跨接口匹配
内容的提问来源于stack exchange,提问作者netauto
相关产品推荐
相关产品推荐

