正则表达式:多行校验问题

Regular Expression : Multiline check problem

你好,我对这个正则表达式有疑问

!
interface TenGigabitEthernet 1/49
 description Uplink
 no ip address
 switchport
 no shutdown
!
interface TenGigabitEthernet 1/50
 no ip address
 shutdown
!
interface TenGigabitEthernet 1/51
 no ip address
 shutdown
!

我尝试了这个正则表达式(接口)((.\s.)+) 但它不起作用,因为它匹配 "interface" 和文本的其余部分

我需要赶上第一组 "interface",在第二组我需要全部,直到第一次出现“!” 例如: 第一组:

interface

第二组:

TenGigabitEthernet 1/51
 no ip address
 shutdown

我该怎么做?

试试这个:

(interface)\s+([^!]+)

Here Is Demo

使用这个:

(interface)\s*([^!]+) /g

第一组攻占hard-codedinterface。第二组通过跳过前导空格(如果有)来捕获 ! 以外的所有内容。全局标志 /g 确保所有匹配项。

Demo

如果内容本身可以包含 !,您可以检查行首的 ! 并重复匹配所有行,直到遇到 !开始。

^(interface)\s*(.*(?:\n(?!!).*)*)

在Java

String regex = "^(interface)\s*(.*(?:\n(?!!).*)*)";

Regex demo