在 PHP (preg_replace) 中使用带有数组的数字文字

Use numeric literals with an array in PHP (preg_replace)

我正在尝试将数字文字与我的数组 $test 一起使用 PHP 中的 preg_replace,这就是我得到的:

$test["a"] = "hey";

// Find a as [=12=]
echo preg_replace("/[a-z]/", "Found:[=12=]", "a")."\n";

// Can replace it by "hey"
echo preg_replace("/[a-z]/", $test['a'], "a")."\n";

// Can't replace it :/
echo preg_replace("/[a-z]/", $test["[=12=]"], "a")."\n";

如您所见,最后一个 preg_replace 函数不起作用,而其他两个函数运行良好...我尝试了很多次用各种技巧将 $0 包括在内,但仍然没有效果。 .. 你能帮帮我吗?

您可以使用 preg_replace_callback() :

echo preg_replace_callback("/[a-z]/", function ($b) use ($test) {
    return $test[$b[0]];
}, "a")."\n";

有更多测试:

echo preg_replace_callback("/[a-z]/", function ($b) use ($test) {
    if (isset($b[0]) && isset($test[$b[0]]))
        return $test[$b[0]];
    return "";
}, "a")."\n";

您当前的用例不需要正则表达式,您可以(如果可能的话应该)使用 strtrstr_replace,具体取决于要求:

$test["a"] = "hey";
$test["b"] = "you";

echo strtr("a b", $test); //hey you

echo str_replace(array_keys($test), array_values($test), "a b"); //hey you

请参阅When to use strtr vs str_replace?了解不同之处。