2013-08-12 3 views
0
public function getBlock($tag) 
    { 
    preg_match ('#<!-- START '. $tag . ' -->(.+?) 
     <!-- END '. $tag . ' -->#si', $this->content, $tor); 
    $tor = str_replace ('<!-- START '. $tag . ' -->', "", $tor[0]); 
    $tor = str_replace ('<!-- END ' . $tag . ' -->', "", $tor); 
    return $tor; 
} 

Кто-нибудь знает, что делает эта функция?Что делает это регулярное выражение PHP?

+2

запустить его и узнать? – Michelle

+0

Это очень плохой способ сопоставить и заменить блоки. Динамические регулярные выражения почти всегда есть. Где ты это взял? – Ryan

+0

Зависит от того, что такое '$ tag'. Честно говоря, как мы должны знать? –

ответ

2
public function getBlock($tag) 
    { 
    //below finds the start tag, then matches any character multiple times 
    // until it finds <!-- END $tag -->, store the result in $tor 
    preg_match ('#<!-- START '. $tag . ' -->(.+?) 
     <!-- END '. $tag . ' -->#si', $this->content, $tor); 

    //the # is the delimiter, with s meaning treat as a single line 
    // so . matches \r\n for example. and i means insensitive 
    $tor = str_replace ('<!-- START '. $tag . ' -->', "", $tor[0]); 
    $tor = str_replace ('<!-- END ' . $tag . ' -->', "", $tor); 

    //remove the line with start on then remove line with end on. 

    return $tor; 
    //return what was between the two lines. 
} 

Ive добавил некоторые комментарии к этой функции, надеюсь, что они делают его более ясным

+0

Что такое 's' означает в '#si'? –

+1

"с s смысл рассматривать как одну строку". без этого. не будет соответствовать новой строке – exussum

2

Похоже, он удаляет

'#<!-- START '. $tag . ' -->' 

и

'<!-- END ' . $tag . ' -->' 

из текста в $ this-> содержание и возвращает весь текст, который был между этими комментариями.

Смежные вопросы