尝试匹配,如果一个字不存在。我之前已经完成了这项工作,但是在试图将相同的概念应用到我目前的regex
模式中时遇到问题。以下模式来自Cisco交换机,它使用“!”作为界面之间的分隔符。如果存在vlan1
并且在其多行配置块中包含“no shutdown”,则该模式匹配。正则表达式匹配如果字符串不存在(多行)
(?mi)vlan1[^\d][^!]*?((^.|^)no shutdown)
的问题是,我想也匹配时,接口vlan1
config
块没有字符串“关机”。这是必需的,因为“no shutdown”和“shutdown”(不带“no”)都表示接口vlan1已启用。
例如,我期待类似下面的图案,这是不行的东西:
(?mi)vlan1[^\d][^!]*?(^.|^)(no shutdown|(?!shutdown))
结果应符合仅在某个“不关机”或没有“关闭”的存在。
看到这里的工作: https://regex101.com/r/vhE3xm/1
正则表达式小提琴中的预期匹配是什么? –
尝试['(?mi)。* vlan1(?:\ R(?! * shutdown | interface Vlan)。*)*'](https://regex101.com/r/Qr8kJS/2)。 –
不要在一种模式下执行此操作,提取块,使用“vlan1”上的测试和“关闭”上的测试对它们进行过滤。 –