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

标签 php template-engine preg-match-all

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

我正在尝试创建一个 PHP 模板引擎,它将查询 <ZONE header> 的字符串和 </ZONE header>它将拉取介于两者之间的所有内容,然后运行一个 php 函数来查看 header 是否存在。如果标题存在,它将显示中间的内容,如果标题不存在,它将删除中间的内容。

这是一个例子:

$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>然后它将运行我创建的 php 函数 header()它检查数据库中是否存在“ header ”,如果存在,它将显示 <ZONE header></ZONE header> 中的所有内容如果没有,它将把它从字符串中删除。

如果“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>

如果“header”不存在:

<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 的文档.

关于PHP preg_match_all 在匹配项上运行 php 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10697756/

相关文章:

python - 什么时候在 Python 中使用模板引擎?

php - 如何匹配整个 html 元素,无论里面有什么,就像浏览器一样?

php preg_match_all 匹配错误的字符串

php - 如果我只使用 PHP 文件而不与数据库相关,那么我可以在 XAMPP 中停止 MySql 服务吗?

php - 如何在 Eclipse 中调试 php

java - Apache 速度 : ship with compiled templates

php - 获取所有嵌套的花括号

php - 将 php 关联数组写入文本文件

php - 在 Laravel 的 Eloquent 上查找以多对多关系共享标签的文章的正确方法

java - 使用 Rythm 将变量与其他文本连接起来