簡體   English   中英

PHP preg_match_all對匹配的項目運行php函數

[英]PHP preg_match_all run php function on matched items

我不確定術語,所以我提前道歉。

我正在嘗試創建一個PHP模板引擎,它將查詢<ZONE header></ZONE header>的字符串,它會將所有內容拉到中間,然后運行一個php函數來查看該標頭是否存在。 如果標題存在,它將顯示它們之間的內容,如果標題不存在,它將刪除它們之間的內容。

這是一個例子:

$string = "
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<ZONE header><img src="images/header.jpg" /></ZONE header>
<p>Nam sollicitudin mattis nisi, eu convallis mi tincidunt vitae.</p>
";

理想情況下,該函數將刪除<ZONE header><img src="images/header.jpg" /></ZONE header>然后它將運行我創建的header()函數,該函數檢查是否“標題”存在於數據庫中,如果存在,它將顯示<ZONE header></ZONE header> ,如果不存在,則會將其從字符串中刪除。

如果存在“標題”:

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<img src="images/header.jpg" />
<p>Nam sollicitudin mattis nisi, eu convallis mi tincidunt vitae.</p>

如果“標題”不存在:

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Nam sollicitudin mattis nisi, eu convallis mi tincidunt vitae.</p>

這是我正在與之合作但遭遇困境:

        preg_match_all("|\<ZONE_header>(.*)\<\/ZONE_header>|isU", $string, $zone, PREG_SET_ORDER);

        if (isset($zone) && is_array($zone)) {
            foreach ($zone as $key => $zoneArray) {
                if ($key == 0) { 
                    $html = $zoneArray[1];
                    if ($html != "") {
                        if (header() != "") {
                            $html = str_replace($zoneArray[0], NULL, $html);
                        }
                    }                       
                }
            }
        }

        echo $html;

任何想法,想法,建議? 感謝您的幫助!

請注意,我用get_header()替換了header()函數。

$string = preg_replace_callback('/<ZONE header>(.+)<\/ZONE header>/', 'replace_header', $string);

function replace_header($matches) {
  return get_header() ? $matches[1] : '';
}

請參閱preg_replace_callback文檔。

像這樣 ?

$string = '
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<ZONE header><img src="images/header.jpg" /></ZONE header>
<p>Nam sollicitudin mattis nisi, eu convallis mi tincidunt vitae.</p>
';
$pattern="#<ZONE header[^>]*>(.+)</ZONE header>#iU"; 

preg_match_all($pattern, $string, $matches);
if (strlen($matches[0][0])==0){
    $string=strip_tags($string,"<p>");
}
else{
    $string=strip_tags($string,"<p><img>");

}
echo $string;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM