首页 > 解决方案 > 正则表达式寻找一个基本词(snmp-server)然后它需要拥有所有三个(组视图和主机)

问题描述

我正在尝试制作一个正则表达式来搜索 snmp-server 的配置文件,它需要有一个组视图和一个主机到目前为止我试过

snmp-server(group)(view)(host)
(^snmp-server group)(^snmp-server view)(^snmp-server host)

这一个拉所有三个放它只寻找三个中的一个

snmp-server(group)|(view)|(host)

一个例子

这会通过

snmp-server group 
snmp-server view 
snmp-server enable 
snmp-server host 

这会失败

snmp-server group 
snmp-server enable 
snmp-server host 

标签: regex

解决方案


使用捕获组和反向引用,您可以使用此正则表达式:

\A(snmp-server)\s+(group|view|host)\n(?:.+\n)*?\1\s+(?!\2)(group|view|host)\n(?:.+\n)*?\1\s+(?!\2|\3)(group|view|host)

正则表达式演示

正则表达式详细信息:

  • \A: 开始
  • (snmp-server)snmp-server:在捕获组 #1 中匹配和分组
  • \s+: 匹配 1+ 个空格
  • (group|view|host):匹配给定的 3 个单词并在组 #2 中捕获
  • \n(?:.+\n)*?: 匹配换行符后跟 0 行或更多行(惰性)
  • \1\s+: 使用反向引用匹配snmp-server,后跟 1+ 个空格
  • (?!\2):负前瞻断言我们与第 2 组中捕获的内容不匹配
  • (group|view|host):匹配给定的 3 个单词并在第 3 组中捕获
  • \n(?:.+\n)*?: 匹配换行符后跟 0 行或更多行(惰性)
  • \1\s+: 使用反向引用匹配snmp-server,后跟 1+ 个空格
  • (?!\2|\3): 否定前瞻断言我们与第 2 组和第 3 组中捕获的内容不匹配
  • (group|view|host):匹配给定的 3 个单词并在第 4 组中捕获

推荐阅读