2017-03-09 41 views
0

我有使用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" 

回答

0

使用正則表達式

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