正则表达式与周围匹配以下

时间:2019-06-04 05:46:06

标签: regex-lookarounds

需要编写正则表达式以匹配引用和未引用的项目

\"[a-z,A-Z]+.*\"|\b[a-z,A-Z,0-9]+.*(?<=[\n+\r+\s+]})

要匹配的样本数据

"visitor block" {
    option {
      disable-server-response no;
    }
    source any;
    category any;
    tag guest-in;
  }
  visitor_Internet {
    option {
      disable-server-response no;
    }
    source-user any;
    action allow;
  }
  "Deny guest" {
    option {
      disable-server-response no;
    }
    action deny;
    tag guest;
  }

通过正则表达式,我需要选择双引号(访问者块,Deny guest)中的字符串,并且也不要选择用双引号引起来的字符串,例如visitor_Internet.only名称字符串要捕获

1 个答案:

答案 0 :(得分:0)

我想你想要

  • 的开头捕获子字符串
  • 在双引号内并以ASCII字母开头
  • 然后捕获{之前的所有文本,直到},其后是换行符,然后是空白,其后是第一个组模式或字符串的末尾。

您可以使用

(?ms)^\s*"([a-zA-Z][^"]*)"\s*{(.*?)}(?=\h*\n\s*"[a-zA-Z][^"]*"\s*{|\s*\z)

请参见regex demo

注意:如果块之间的行不匹配,则此方法将无效。

详细信息

  • (?ms)-启用多行和dotall模式
  • ^-一行的开头
  • \s*-0个或多个空格
  • "-一个"
  • ([a-zA-Z][^"]*)-第1组:一个ASCII字母,然后是"以外的0+个字符
  • "-一个"字符
  • \s*-超过0个空格
  • {-一个{字符
  • (.*?)-第2组:任意0个以上的字符,尽可能少
  • }-一个}字符,后跟
  • (?=\h*\n\s*"[a-zA-Z][^"]*"\s*{|\s*\z)-要么
    • \h*\n\s*"[a-zA-Z][^"]*"\s*{-0+个水平空格,一个换行符,0 +个空格,",一个ASCII字母,除""以外的0个字符,然后为0 +空格和{
    • |-或
    • \s*\z-字符串的末尾有0+个空格。