PHP用数组元素值替换大括号之间的字符串

lla*_*ato 1 php regex preg-replace

我有一大堆内容被读入,它包含许多字符串{{some_text}},我正在尝试做的是找到所有这些出现并用数组中的另一个值替换它们$text["some_text"].

我已经尝试过使用preg_replace,但不确定如何在括号中找到找到的文本并在替换值中使用它.

$body = "This is a body of {{some_text}} text from a book.";
$text["some_text"] = "really cool";
$parsedBody = preg_replace("\[{].*[}]/U", $text[""], $body);
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,我试图some_text从字符串中获取文本并使用它来调用数组中的元素,这个例子非常基本,因为它的$body值非常大,并且它$text也有几百个元素.

anu*_*ava 5

您可以使用preg_replace_callback和使用捕获组([^}]+)在数组中查找索引$text:

$repl = preg_replace_callback('/{{([^}]+)}}/', function ($m) use ($text) {
            return $text[$m[1]]; }, $body);
//=> This is a body of really cool text from a book.
Run Code Online (Sandbox Code Playgroud)

use ($text)声明将引用传递$text给匿名者function.