PHP 获取多个自定义标签之间的文本

PHP get text between multiple custom tags

我需要解析自定义模板文件。

假设我的模板文件如下所示。

@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);
}

我只得到空数组,我不知道为什么。

此外,如果您发现了一种更优雅的方法来获得所需的结果。我愿意接受建议。

提前致谢。

您可以在一个模式中获得两个匹配项,然后将它们组合起来。您不会显示内容是多行的,但这会处理它。 array_map('trim', $sections[2]) 摆脱了内容两端的 whitespace/newlines:

preg_match_all("/@section\('([^']+)'\)([^@]+)/", $this->fileContents, $sections);
$sections = array_combine($sections[1], array_map('trim', $sections[2]));