使用平衡组匹配配置文件中的自定义嵌套结构
问题描述:
我有使用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"