You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单行preg_replace替换{% %}内嵌套的PHP模板{{ }}变量?

单行preg_replace解决方案

直接用preg_replace结合匿名回调就能实现,核心思路是先锁定所有{% ... %}块,再仅对块内的{{ }}变量做替换:

// PHP 7.4+ 箭头函数版本(单行写法)
$template = preg_replace('/{%(.*?)%}/s', fn($m) => preg_replace('/{{\s*([\w\-\.]+)\s*}}/', '<?php echo $\\1; ?>', $m[1]), $template);

如果需要兼容PHP 7.4之前的版本,改用普通匿名函数:

$template = preg_replace('/{%(.*?)%}/s', function($m) {
    return preg_replace('/{{\s*([\w\-\.]+)\s*}}/', '<?php echo $\\1; ?>', $m[1]);
}, $template);

原理说明

  1. 外层正则/{%(.*?)%}/s:
    • 精准匹配所有被{%和%}包裹的内容,.*?采用非贪婪模式,避免误匹配跨多个{% ... %}的内容;s修饰符让.能匹配换行符,支持多行模板块。
  2. 内层替换:
    • 对每个捕获到的{% ... %}内部内容,用正则/{{\s*([\w\-\.]+)\s*}}/捕获变量名(支持带点、下划线的变量,比如item.name),替换为对应的PHP输出语句。

示例验证

输入模板:

外部变量不会被替换:{{ varx }}
{%
循环内的变量1:{{ item.name }}
循环内的变量2:{{ item-price }}
%}
另一个外部变量:{{ var3 }}

替换后输出:

外部变量不会被替换:{{ varx }}
循环内的变量1:<?php echo $item->name; ?>
循环内的变量2:<?php echo $item-price; ?>
另一个外部变量:{{ var3 }}

(注:如果你的变量是数组结构,可将替换语句改成<?php echo $\\1; ?>,比如{{ item[name] }}对应<?php echo $item['name']; ?>,根据实际变量结构调整即可)

内容的提问来源于stack exchange,提问作者Jod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:55:08