我有使用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 直到 node1 。但是,如果我将字符串从node1传递到结束,那么我的正则表达式只会匹配到第一个 END 。 (即它将无法捕获what_about_me变量)我最近学会了平衡组,我想知道如何使用它来完全递归树。
这是我正在使用的正则表达式,用于匹配根树和子根。 (差异是^和$来锚定值)
$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 :(得分: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"