PHP preg_match_all在匹配项上运行PHP函数

PHP preg_match_all在匹配项上运行PHP函数,php,template-engine,preg-match-all,Php,Template Engine,Preg Match All,我不确定术语,所以我提前道歉 我正在尝试创建一个PHP模板引擎,该引擎将查询和的字符串,它将在两者之间提取所有内容,然后运行一个PHP函数以查看标头是否存在。如果标题存在,它将显示介于两者之间的内容,如果标题不存在,它将删除介于两者之间的内容 下面是一个例子: 如果“标题”不存在: Lorem ipsum Door sit amet,是一位杰出的领导者 这是一个令人振奋的时刻 以下是我一直在处理的问题,但却被卡住了: preg\u match\u all(“| \(.*)\\isU”、$st

我不确定术语,所以我提前道歉

我正在尝试创建一个PHP模板引擎,该引擎将查询
的字符串,它将在两者之间提取所有内容,然后运行一个PHP函数以查看标头是否存在。如果标题存在,它将显示介于两者之间的内容,如果标题不存在,它将删除介于两者之间的内容

下面是一个例子: 如果“标题”不存在:
Lorem ipsum Door sit amet,是一位杰出的领导者

这是一个令人振奋的时刻


以下是我一直在处理的问题,但却被卡住了:
preg\u match\u all(“| \(.*)\\isU”、$string、$zone、preg\u SET\u顺序);
if(isset($zone)和is_数组($zone)){
foreach($key=>$zoneArray的分区){
如果($key==0){
$html=$zoneArray[1];
如果($html!=“”){
如果(标题()!=“”){
$html=str_replace($zoneArray[0],NULL,$html);
}
}                       
}
}
}
echo$html;
有什么想法、想法、建议吗?
谢谢你的帮助

注意,我将您的
header()
函数替换为
get\u header()

$string=preg_replace_回调(“/(.+)/”,“replace_头“,$string);
函数替换_头($matches){
返回get_header()?$matches[1]:“”;
}
请参阅文档以了解类似的情况。

$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;
$string='1!'
Lorem ipsum dolor sit amet,是一位杰出的献身者

这是一个令人振奋的时刻

'; $pattern=“#]*>(.+)#iU”; preg_match_all($pattern,$string,$matches); if(strlen($matches[0][0])==0){ $string=strip_标签($string,); } 否则{ $string=strip_标签($string,); } echo$字符串;
请注意,在输入字符串中,您可能希望使用单引号而不是双引号。请注意,
header()
是一个PHP函数,因此您可能需要重命名该函数。
<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;
$string = preg_replace_callback('/<ZONE header>(.+)<\/ZONE header>/', 'replace_header', $string);

function replace_header($matches) {
  return get_header() ? $matches[1] : '';
}
$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;