好的,这就是我的需要:
%%something%%
的所有条目,如正则表达式/%%([A-Za-z0-9\-]+)%%/i
something
的情况下,用表中的值替换所有实例。E.g。
将%%something%%
替换为$mytable['something']
等
如果是常规替换,我肯定会选择preg_replace
,甚至可以创建一系列可能的替换......但是如果我想让它更灵活一点......
理想情况下,我想要preg_replace($regex, $mytable["$1"], $str);
这样的东西,但显然看起来不行......
我应该怎么做?
答案 0 :(得分:2)
代码:
<?php
$myTable = array(
'one' => '1!',
'two' => '2!',
);
$str = '%%one%% %%two%% %%three%%';
$str = preg_replace_callback(
'@%%(.*?)%%@',
function ($matches) use ($myTable) {
if (isset($myTable[$matches[1]]))
return $myTable[$matches[1]];
else
return $matches[0];
},
$str
);
echo $str;
结果:
1! 2! %%three%%
如果你不想从下面告诉上层,
<?php
$myTable = array(
'onE' => '1!',
'Two' => '2!',
);
$str = '%%oNe%% %%twO%% %%three%%';
$str = preg_replace_callback(
'@%%(.*?)%%@',
function ($matches) use ($myTable) {
$flipped = array_flip($myTable);
foreach ($flipped as $v => $k) {
if (!strcasecmp($k, $matches[1]))
return $v;
}
return $matches[1];
},
$str
);
echo $str;