【发布时间】:2012-07-13 03:21:43
【问题描述】:
我有一个大型多维结构的文件,类似于 json,但不够接近,无法使用 json 库。
数据看起来像这样:
alpha {
beta {
charlie;
}
delta;
}
echo;
foxtrot {
golf;
hotel;
}
我正在尝试构建的正则表达式(对于 preg_match_all)应该匹配每个顶级父级(由 {} 大括号分隔),以便我可以递归匹配,构建一个表示数据的多维 php 数组。
我尝试的第一个正则表达式是/(?<=\{).*(?=\})/s,它贪婪地匹配大括号内的内容,但这并不完全正确,因为当顶层有多个同级时,匹配过于贪婪。下面的例子:
使用正则表达式/(?<=\{).*(?=\})/s 匹配为:
第 1 场比赛:
beta {
charlie;
}
delta;
}
echo;
foxtrot {
golf;
hotel;
结果应该是: 第一场比赛:
beta {
charlie;
}
delta;
第 2 场比赛:
golf;
hotel;
那么正则表达式向导,我在这里缺少什么功能,或者我需要以某种方式用 php 解决这个问题?非常欢迎任何提示:)
【问题讨论】:
-
这个字符串是从哪里来的?它的创作是由你控制的吗?如果是这样,你为什么不使用 json? IMO 这比使用正则表达式解析 HTML 更糟糕,如果值包含
{or},它必然会破坏发生的情况 -
@LawrenceCherone 是的,我有控制权,正如下面评论中所解释的,字符串是一种具有相当严格语法的模板标记语言。我只提到了 json,因为它具有类似的带有大括号的层次嵌套样式,但是它的功能非常不同。如果一个值包含一个杂散的大括号,它将中断,但这是设计使然。语言语法中不允许使用大括号,除非它位于 ("") 块中。
标签: php regex pcre multidimensional-array