0

好的,这就是我需要的:

  • 获取格式为 的所有条目%%something%%,如正则表达式所示/%%([A-Za-z0-9\-]+)%%/i
  • 给定索引,用表中的值替换所有实例something

例如

替换%%something%%$mytable['something']等。


如果是常规替换,我肯定会选择preg_replace,甚至创建一系列可能的替换......但是如果我想让它更灵活一点怎么办......

理想情况下,我想要类似的东西preg_replace($regex, $mytable["$1"], $str);,但显然它看起来不太好......


我该怎么办?

4

1 回答 1

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;
于 2013-05-17T10:18:43.397 回答