如何用正则匹配路由器日志中不含weight的show run vpn 0区块
路由器日志正则匹配修正方案
问题分析
原正则表达式(?<=show run vpn 0)(?s)(.*?)(?=PADB067)会误匹配带| i weight的命令行,原因是它仅以show run vpn 0为匹配起点,未排除后续带过滤参数的命令实例,导致匹配到无实际配置内容的空区块。
正确正则表达式
(?<=PADB067# show run vpn 0\s*)(?!\|\s*i\s*weight)(?s)(.*?)(?=\s*PADB067#)
正则细节说明
(?<=PADB067# show run vpn 0\s*):正向后行断言,精准定位路由器提示符后紧跟目标命令的位置,允许命令末尾存在任意空格(?!\|\s*i\s*weight):负向先行断言,排除命令后附带| i weight过滤参数的情况,兼容参数前后的任意空格(?s):开启单行模式,让.可以匹配换行符,支持跨多行的配置区块匹配(.*?):非贪婪匹配任意字符,避免过度匹配到后续无关日志内容(?=\s*PADB067#):正向先行断言,匹配到下一个路由器提示符前停止,兼容提示符前的任意空格
匹配效果
在提供的日志示例中,该正则会精准匹配到无| i weight参数的show run vpn 0命令后的完整配置区块,即从vpn 0开始到下一个PADB067#之前的所有文本内容。
内容的提问来源于stack exchange,提问作者Harry Leboeuf
相关产品推荐
相关产品推荐

