Ограничить область соответствия шаблону регулярного выражения - PullRequest
0 голосов
/ 01 февраля 2019

Нужна помощь с регулярным выражением.Мои навыки довольно элементарны, и я не смог найти ответ.

Я использую регулярное выражение, чтобы перейти через файл конфигурации, и хочу подтвердить, что интерфейс GigabitEthernet1 / 1/1 не является транкингом vlan 4052-4092.Так как конфигурация занимает несколько строк, и могут быть разные элементы конфигурации между интерфейсом и операторами транкинга, я пытался сделать это, используя что-то вроде этого:

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

Это работает, если GigabitEthernet1 / 1/1 имеетvlan 40xx в разрешенном операторе, но если нет, поиск продолжается до тех пор, пока не будет найдено соответствие на следующем интерфейсе.Есть ли способ заставить регулярное выражение перестать смотреть, как только оно достигнет конца конфигурации интерфейса 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

Спасибо за помощь.Я должен упомянуть, что это inst 'для приложения на конкретном языке программирования, а скорее для входа в систему управления, которая поддерживает регулярные выражения для поиска элементов, которые файл конфигурации должен или не должен включать.

1 Ответ

0 голосов
/ 01 февраля 2019

Попробуйте это регулярное выражение:

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

Нажмите для демонстрации

Объяснение:

  • GigabitEthernet1\/1\/1 - соответствует GigabitEthernet1/1/1
  • (?:(?!interface GigabitEthernet)[\s\S])* - Закаленный жадный жетон - соответствует 0+ появлений любого персонажа, который не начинается с interface GigabitEthernet
  • (vlan.*40(?:9[12]|[6-8][0-9]|5[2-9])) - соответствует vlan, за которым следует 0+ вхождений любого символа, кроме символа новой строки, и, наконец, соответствует требуемому числу от 4052 до 4092
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...