2015-09-30 4 views
2

Привет, ребята, у меня есть вопрос, у меня есть строка, как это:Regex с несколькими линиями до конца строки

interface GigabitEthernet0/3/0/0 
description PhysicalInterface 
! 
interface GigabitEthernet0/3/0/0.100 
description Vlan100 
dot1q vlan 100 
! 
multicast-routing 
address-family ipv4 
interface TenGigE0/2/0/0.3880 
    ! Disable this interface under multicast-routing section: 
    disable 
    ! 
router static 
address-family ipv4 unicast 
    GigabitEthernet0/3/1/4.3999 192.168.100.105 

, так что я хотел бы использовать что-то вроде выберите все между: интерфейс и! нравится:

interface GigabitEthernet0/3/0/0 
    description PhysicalInterface 
    ! 

interface GigabitEthernet0/3/0/0.100 
    description Vlan100 
    dot1q vlan 100 
    ! 


interface TenGigE0/2/0/0.3880 
     ! 

я перепробовал много различных способов:

interface(.*?)\n 
(interface(.*?)|\n{2,}) 

и т.д. (я забыл каждые другие способы) , что вы рекомендуете ребята?

+0

Универсальное решение - это интерфейс ([\ s \ S] *?)! '. Какой у вас аромат регулярного выражения? –

+0

Я использую регулярное выражение в возвышенном тексте – virusivv

+0

Тогда вы можете использовать интерфейс '(? S). * ?!' или '(? Sm)^\ s * interface \ b. * ?!'. –

ответ

1

Для того, чтобы соответствовать какой-то текст, включая символы новой строки между двумя строками, вам нужно использовать ленивый метод согласования точек вместе с DOTALL (или в другой терминологии, SingleLine) модификатора: .*?.

При использовании шаблонов регулярных выражений PCRE (SublimeText использует этот аромат регулярного выражения) вы можете использовать встроенную версию этого модификатора: (?s).

Ложное совпадение точек обеспечивает совпадение между начальной и левой границей конца. 1 q будет сопоставлен в 1 q 4q с шаблоном 1.*?q. Greedy matching, 1.*q, соответствовало бы всей цепочке.

Таким образом, в вашем случае, вы можете использовать следующее регулярное выражение:

(?s)interface.*?! 
|1 | 2  |3|4 

Здесь

  1. Модификатор рядный dotall
  2. Начиная краевому, буквальное interface строку
  3. Ленивый точечная обработка
  4. Литература ! как конечный баун dary
1
\binterface\b[\s\S]*?! 

Это должно сделать это за вас. Читайте демо.

https://regex101.com/r/vV1wW6/45

+0

Чувак, что вы спасли мою жизнь ahahhaha: D – virusivv

+0

@virusivv действительно согласен, если он сработает для вас :) – vks

+0

Я не могу сейчас, он говорит еще 10 минут: S – virusivv

Смежные вопросы