我需要解析自定义模板文件。
假设我的模板文件是这样的。
@section('section1')
some content
@endsection
@section('section2')
some more content
@endsection
作为解析的结果,我需要以下结果:
array(
'section1' => 'some content',
'section2' => 'some more content'
);
我尝试使用此代码首先获取部分名称:
$sectionPattern = '/(?<=\@section\().*?(?=\))/';
preg_match_all($sectionPattern, $this->fileContents, $sections);
按预期工作。结果如下:
$sections = array(
array(
0 => 'section1',
1 => 'section2'
)
);
如果我尝试使用此代码获取每个部分的内容:
foreach($sections[0] as $section) {
$contentPattern = '/(?<=\@section\(' . $section . '\)).*?(?=@endsection)/';
preg_match_all($contentPattern, $this->fileContents, $content);
echo '<pre>';
print_r($content);
}
我只得到空数组,我无法找出原因。
此外,如果您有人看到更优雅的方式来获得所需的结果。我愿意接受建议。
提前致谢。
答案 0 :(得分:2)
您可以在一种模式中获得两种匹配,然后将它们组合在一起。您不会显示多行内容,但这会处理它。 array_map('trim', $sections[2])
删除了内容两端的空格/换行符:
preg_match_all("/@section\('([^']+)'\)([^@]+)/", $this->fileContents, $sections);
$sections = array_combine($sections[1], array_map('trim', $sections[2]));