在 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";
您当前的用例不需要正则表达式,您可以(如果可能的话应该)使用 strtr
或 str_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?了解不同之处。
我正在尝试将数字文字与我的数组 $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";
您当前的用例不需要正则表达式,您可以(如果可能的话应该)使用 strtr
或 str_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?了解不同之处。