当内容未知时,如何用自身的修改版本替换* all *双括号文本

问题描述 投票:0回答:1

我正在创建一个PHP模板页面,我不希望最终用户必须在其中编写PHP代码。因此,我想建立一个系统,将[[[string]]替换为$ string 。这样,我不必维护要查找的变量列表,我可以只使用方括号内的名称,如果代码中有匹配的变量,它将替换它。

我知道如何捕获所有放在方括号中的文本。

$text = 'string [[of]] text [[to]] test'
preg_match_all("/\[\[[^\]]*\]\]/", $text, $matches);

我认为preg_match_all返回所有匹配项的数组,但是似乎可以访问它的唯一方法是类似$ matches [1],但这将无法正常工作,因为我不知道会有多少匹配项会。

我已经尝试过

foreach ($matches as $match) { 
   ///code
}

但是我认为这个foreach着眼于整个数组,而不是内部。

一旦获得每场比赛,我就会知道如何去掉两个括号并将其变成PHP可以识别的变量,而不是字符串。

str_replace($match, ${substr($match, 2, -2)}, $text)

[如果您对如何将HTML文件中的双括号文本转换为变量有更好的了解,PHP将首先读取而无需知道双括号中的内容,我也将对另一种解决方案感兴趣。

php regex templates variables
1个回答
0
投票

preg_match_all('/\[\[.*?\]\]/',$string,$matches);

将提供$ matches:

Array
(
    [0] => Array
        (
            [0] => [[of]]
            [1] => [[to]]
        )

)

因此您可以循环$matches[0]

© www.soinside.com 2019 - 2024. All rights reserved.