限制正则​​表达式模式匹配范围

时间:2019-02-01 12:55:28

标签: regex

寻找与一个正则表达式的一些帮助。我的技能是非常基本的,我一直没能找到答案。

我使用正则表达式它去,虽然配置文件,并且要确认端口GigabitEthernet1 / 1/1不中继VLAN 4052-4092。由于配置跨越多行,并且接口和中继语句之间可能存在不同的配置元素,因此我尝试使用以下方法:

GigabitEthernet1\/1\/1[\s\S]*?(vlan.*40[5-8][0-9]|9[12])

这个作品,如果端口GigabitEthernet1 / 1/1在允许的语句40XX VLAN,但如果没有,继续搜索,直到它找到它的下一个界面上的匹配。有没有一种方法可以让我得到的正则表达式来停止寻找,一旦击中1/1/1接口配置的终结?

interface GigabitEthernet1/1/1
 description link-to-someswitch-Gi2/0/1
 switchport access vlan 3109
 switchport trunk allowed vlan 300,301,350,358,800,3109
 switchport trunk encapsulation dot1q
 switchport trunk native vlan 3109
 switchport mode dynamic desirable
 srr-queue bandwidth share 40 20 20 20
 srr-queue bandwidth shape  10 0 0 0
 priority-queue out 
 no snmp trap link-status
 mls qos trust dscp
 spanning-tree portfast disable
!
interface GigabitEthernet1/1/2
 description link-to-someswitch2-Gi2/0/1
 switchport access vlan 3609
 switchport trunk allowed vlan 300,301,350,358,800,3609,4088
 switchport trunk encapsulation dot1q
 switchport trunk native vlan 3109
 switchport mode dynamic desirable
 srr-queue bandwidth share 40 20 20 20
 srr-queue bandwidth shape  10 0 0 0
 priority-queue out 
 no snmp trap link-status
 mls qos trust dscp
 spanning-tree portfast disable

感谢您的帮助。我应该指出,这个研究所”应用到特定的编程语言,而是进入一个管理系统,支持正则表达式查找元素一个配置文件应该或不应该包括。

1 个答案:

答案 0 :(得分:0)

尝试此正则表达式:

GigabitEthernet1\/1\/1(?:(?!interface GigabitEthernet)[\s\S])*(vlan.*40(?:9[12]|[6-8][0-9]|5[2-9]))

Click for Demo

说明:

  • GigabitEthernet1\/1\/1-匹配GigabitEthernet1/1/1
  • (?:(?!interface GigabitEthernet)[\s\S])*-Tempered Greedy Token-匹配0+次出现的不以interface GigabitEthernet开头的任何字符
  • (vlan.*40(?:9[12]|[6-8][0-9]|5[2-9]))-匹配vlan,然后匹配0+次出现的除换行符之外的任何字符,最后匹配4052至4092之间的所需数字