使用平衡组匹配配置文件中的自定义嵌套结构

问题描述:

我有使用BEGIN和END关键字在嵌套结构中存储字段的文件。例如,使用平衡组匹配配置文件中的自定义嵌套结构

BEGIN Root_Name 

    var1 = 0 
    var2 = "string" 
    var3 = "string" 

    BEGIN node1 
     var = "string" 
     var= 1 

     BEGIN node2 
      var = 1 
     END 

     what_about_me = "??" 
    END 
END 

我的正则表达式是能够首先整个树结构从ROOT_NAME匹配,直到其匹配END直到节点1。但是,如果我将字符串从node1传递到结尾,那么我的正则表达式只会匹配到第一个END。 (即它将无法捕获what_about_me变量)我最近学习了有关平衡团体的知识,我想知道如何使用它来充分缓冲树。

这是我目前用来匹配根树和subroot的正则表达式。 (差异是^和$锚定值)

$AnchoredDelimiter = "(^(BEGIN)(\s+)((`".*`")|((\w|_|-)+))[\r\n]*)" 
$AnchoredClose = "((?-i)^END(\t|)*)" 
$Root = "$AnchoredDelimiter$Body$AnchoredClose" 

$Delimiter = "((BEGIN)(\s+)((`".*`")|(\w|_|-)+)[\r\n]*)" 
$Body = "((.|[\r\n])*?)" 
$Close = "((?-i)END(\t|)*)" 
$SubRoot = "$StandAlone$Delimiter$Body$Close" 

使用正则表达式

$Delimiter = "(((?-i)BEGIN(?i))(\s+)((`".*`")|(\w|_|-)+)[\r\n]*)" 
$Close = "((?-i)\bEND\b(?i))" 
$Root = "(?m)$Delimiter(?<Contents>(?>\s|(?<Delimiter>$Delimiter)|(?<-Delimiter>$Close)|.)+?(?(Delimiter)(?!)))$Close"