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]));
我需要解析自定义模板文件。
假设我的模板文件如下所示。
@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]));