在结束行之前有多行的正则表达式

时间:2015-09-30 18:19:32

标签: 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,})
等等(我已经忘记了其他方式) 你有什么推荐的人吗?

2 个答案:

答案 0 :(得分:1)

\binterface\b[\s\S]*?!

这应该为你做。参见演示。

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

答案 1 :(得分:1)

为了匹配一些文本,包括两个字符串之间的换行符,您需要使用惰性点匹配技术和DOTALL(或其他术语,单行)修饰符:.*?

使用PCRE正则表达式模式时(SublimeText使用此正则表达式),您可以使用此修饰符的内联版本:(?s)

延迟点匹配可确保开始和最左端边界之间的匹配。 1 q1 q 4q1.*?q模式进行匹配。贪婪匹配1.*q将匹配整个字符串。

因此,在您的情况下,您可以使用以下正则表达式:

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

在这里,

  1. 内联dotall修饰符
  2. 起始边界,文字interface字符串
  3. 懒点加工构造
  4. 文字!作为结束边界