2015-04-02 84 views
1

我需要解析一個自定義模板文件。PHP在多個自定義標籤之間獲取文本

可以說我的模板文件看起來像這樣。

@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 . '\)).*?([email protected])/'; 
    preg_match_all($contentPattern, $this->fileContents, $content); 
    echo '<pre>'; 
    print_r($content); 
} 

我只得到空數組,我不能找出原因。

此外,如果你有人看到一個更優雅的方式來獲得所需的結果。我很樂意提供建議。

在此先感謝。

回答

2

您可以在一種模式中獲得兩個匹配,然後將它們組合。你不會顯示內容是多行的,但這將處理它。 array_map('trim', $sections[2])擺脫內容兩端的空白/換行符:

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

令人難以置信!我仍然有很多需要正則表達式的東西。謝謝! – arkhon 2015-04-02 15:41:42

相關問題