我在文本文件中有一些字符串。
line con 0
session-timeout 10
exec-timeout 10 0
privilege level 15
logging synchronous
login authentication console-in
transport preferred none
stopbits 1
line vty 0 4
session-timeout 30
exec-timeout 30 0
logging synchronous
transport preferred none
transport input ssh
transport output ssh
line vty 5 15
session-timeout 10
exec-timeout 10 0
logging synchronous
transport preferred none
transport input ssh
transport output ssh我在找/匹配
session-timeout 10
exec-timeout 10仅在带有Regex的line con 0下。
line con 0.*\n(.*\n)*.*session-timeout 10.*\n(.*\n)*.*exec-timeout 10也会抓住
vty 5 15
session-timeout 10
exec-timeout 10有办法做得更好吗?
发布于 2021-08-30 22:28:39
如果2行session-timeout 10和exec-timeout 10应按该顺序出现,则可以使用2个捕获组。
根据捕获组值,确保它前面的行不交叉匹配,例如,第一次匹配的是line,第二次匹配的是session-,第二次匹配的是exec-。
^line con 0(?:\r?\n(?!line | session-).*)*\r?\n[\p{Zs}\t]*(session-timeout 10).*(?:\r?\n(?!line| exec-).*)*\r?\n[\p{Zs}\t]*(exec-timeout 10)\b^开始line con 0匹配(?:\r?\n(?!line | session-).*)*匹配不以line或session-开头的所有行\r?\n[\p{Zs}\t]*匹配换行符和可选空格或制表符(session-timeout 10)捕获组1,匹配字面意思(或使用[0-9]+匹配1+数字).*与行的其余部分匹配(?:\r?\n(?!line| exec-).*)*匹配不以line或exec-开头的所有行\r?\n[\p{Zs}\t]*匹配换行符和可选空格或制表符(exec-timeout 10)捕获组2,匹配字面意思\b阻止部分匹配的单词边界查看regex 101演示和.NET regex演示(单击"Table“选项卡查看组)
发布于 2021-08-30 21:55:20
这是因为贪婪行为是正则匹配的默认行为(它试图在匹配模式的同时尽可能扩展匹配)。在量词后添加?,+或*解决了贪婪的问题。
因此,请使用以下模式:
line con 0.*?\n(.*?\n)*?.*?session-timeout 10.*?\n(.*?\n)*?.*?exec-timeout 10尽可能少的线条匹配。
相配
line con 0
session-timeout 10
exec-timeout 10https://stackoverflow.com/questions/68990677
复制相似问题