如何在带有{{mustache}}的PHP中使用preg_replace

雅各布·科恩

我正在尝试将一个字符串中所有出现的{{key}}替换为数组(或stdClass)中的对应键

我不太确定如何正确构建正则表达式。

例如:

我想做这个字符串:

"Hi my name is {{name}}, I am {{age}} years old."

而这个数组:

$person = [
    "name" => "John",
    "age" => 28,
    "city" => "London",
    "country" => "England",
];

对此:

"Hi my name is John, I am 28 years old."

我考虑过使用,str_replace但是这意味着如果我在一个潜在的人身上有1万个键,它将重复进行1万次,而在preg_replace我替换两次之后。因此,使用str_replace不是由于恶劣效率的选择。

我也知道正确的正则表达式,但是它可能有无限的$ i,其中$ i是找到的匹配项的索引,我不确定该怎么做。

什么是正确的模式以及正确的替换方式?

乔纳森·米

首先,您将要正确定义一个array

$person = [
     'name' =>'John',
     'age' => '28',
     'city' => 'London',
     'country' => 'England'
];

如果您要使用preg_replace,则“现在有2个问题。” 那么,为什么不直接str_replace在循环中使用呢例如,说您的输入是:$string = "Hi my name is {{name}}, I am {{age}} years old."您可以执行以下操作:

while($i = current($person)) {
    $string = str_replace('{{'.key($person).'}}', $i, $string);
    next($person);
}

Live Example

编辑:

如果您认为其中的条目数量$person证明使用正则表达式合理的,那么您将需要使用preg_replace_callback而不是preg_replace,因此可以将索引输入到您的array

$string = preg_replace_callback('/{{((?:[^}]|}[^}])+)}}/', function($match) use ($person) { return ($person[$match[1]]); }, $string);

Live Example


由于无论如何都使用正则表达式,因此您可以获得处理转义字符的其他功能。如果您对此感兴趣,则需要使用以下正则表达式:

\G(?:[^{\\]|\\.|{[^{])*{{((?:[^}\\]|\\.|}[^}])+)}}

Live Example

而且您需要将自己调整preg_replace_callback为:

$string = preg_replace_callback('/\G((?:[^{\\]|\\.|{[^{])*){{((?:[^}\\]|\\.|}[^}])+)}}/', function($match) use ($person) { return $match[1].$person[$match[2]]; }, $string);

Live Example

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在PHP中使用preg_replace()?

来自分类Dev

如何在尺寸表中使用preg_replace并在PHP中进行替换?

来自分类Dev

如何在尺寸表中使用preg_replace并在PHP中进行替换?

来自分类Dev

如何在 PHP 中使用 preg_replace 来做这个例子?

来自分类Dev

如何在php中使用preg_replace用每个唯一值替换多次出现

来自分类Dev

如何在模式的preg_replace中使用变量?

来自分类Dev

我该如何在mustache.js中使用if值?

来自分类Dev

如何在 mustache 模板中使用 bool 和 bool 条件?

来自分类Dev

“é”,“è”和所有带有重音符号的字母未在PHP函数中使用PREG_REPLACE显示

来自分类Dev

如何使用Mustache设置HTML标头

来自分类Dev

在PHP中我如何在preg_replace中使用两个正则表达式?

来自分类Dev

PHP数组+ Mustache模板

来自分类Dev

如何在preg_replace中使用数组和正则表达式作为模式?

来自分类Dev

如何在 preg_replace 模式中使用正则表达式特殊字符

来自分类Dev

Mustache PHP-如何从数据库加载数据?

来自分类Dev

带有JSON数据的Mustache.php引发可捕获的致命错误

来自分类Dev

如何使用Mustache模板中的jQuery内置函数

来自分类Dev

如何使用 mustache.js 渲染普通数组?

来自分类Dev

带有Hogan / Mustache的永久模板(或可重复使用的模板)?

来自分类Dev

使用带有职业名称的 preg_replace 并失败

来自分类Dev

如何在PHP中的img标签上使用preg_replace类和src?

来自分类Dev

我如何在站点URL后使用PHP函数preg_replace()命名.txt文件

来自分类Dev

当单词多次出现时,如何使用具有相同模式的PHP preg_replace?

来自分类Dev

如何调试Mustache js模板?

来自分类Dev

使用Mustache JS创建表

来自分类Dev

使用 mustache 从 JSON 渲染 HTML

来自分类Dev

如何在两行上使用preg_replace

来自分类Dev

带有 php 的正则表达式,使用 preg_replace 复制输入并将其嵌套在 div 中

来自分类Dev

PHP,正则表达式-如何使用preg_replace逃逸\ n?

Related 相关文章

  1. 1

    如何在PHP中使用preg_replace()?

  2. 2

    如何在尺寸表中使用preg_replace并在PHP中进行替换?

  3. 3

    如何在尺寸表中使用preg_replace并在PHP中进行替换?

  4. 4

    如何在 PHP 中使用 preg_replace 来做这个例子?

  5. 5

    如何在php中使用preg_replace用每个唯一值替换多次出现

  6. 6

    如何在模式的preg_replace中使用变量?

  7. 7

    我该如何在mustache.js中使用if值?

  8. 8

    如何在 mustache 模板中使用 bool 和 bool 条件?

  9. 9

    “é”,“è”和所有带有重音符号的字母未在PHP函数中使用PREG_REPLACE显示

  10. 10

    如何使用Mustache设置HTML标头

  11. 11

    在PHP中我如何在preg_replace中使用两个正则表达式?

  12. 12

    PHP数组+ Mustache模板

  13. 13

    如何在preg_replace中使用数组和正则表达式作为模式?

  14. 14

    如何在 preg_replace 模式中使用正则表达式特殊字符

  15. 15

    Mustache PHP-如何从数据库加载数据?

  16. 16

    带有JSON数据的Mustache.php引发可捕获的致命错误

  17. 17

    如何使用Mustache模板中的jQuery内置函数

  18. 18

    如何使用 mustache.js 渲染普通数组?

  19. 19

    带有Hogan / Mustache的永久模板(或可重复使用的模板)?

  20. 20

    使用带有职业名称的 preg_replace 并失败

  21. 21

    如何在PHP中的img标签上使用preg_replace类和src?

  22. 22

    我如何在站点URL后使用PHP函数preg_replace()命名.txt文件

  23. 23

    当单词多次出现时,如何使用具有相同模式的PHP preg_replace?

  24. 24

    如何调试Mustache js模板?

  25. 25

    使用Mustache JS创建表

  26. 26

    使用 mustache 从 JSON 渲染 HTML

  27. 27

    如何在两行上使用preg_replace

  28. 28

    带有 php 的正则表达式,使用 preg_replace 复制输入并将其嵌套在 div 中

  29. 29

    PHP,正则表达式-如何使用preg_replace逃逸\ n?

热门标签

归档