我有一个正则表达式,我想以最有效的方式用相应的替换数组替换匹配数组中的每个匹配项。
例如,我有:
$string = '~~hello~~ there, how ~~are~~ ~~you~~?';
$pattern = '/~~(.*?)~~/';
$replacements = array();
$replacements[0] = 'hi';
$replacements[1] = 'am';
$replacements[2] = 'i';
我想把 $string
变成:
hi there, how am i?
最初我希望它会像这样简单:
$string = preg_replace($pattern, $replacements, $string);
但是好像不行。所以第一个问题是:如果 $replacements
是一个数组,那么 $string
是否也必须是一个数组?
现在,我可以想出(看似)低效的方法来执行此操作,例如计算匹配项的数量并制作一个数组,其中填充适当数量的相同正则表达式。但这将我们引向第二个问题:是否有更有效的方法? PHP 专家,您会怎么做?
最佳答案
你可以在这里使用一个简单的评估技巧:
print preg_replace('/~~(\w+)~~/e', 'array_shift($replacements)', $st);
array_shift
只会从您的替换数组中获取第一个条目。
不过最好还是使用 map ("hello"=> "hi"
)。
关于PHP 用单个正则表达式模式替换所有实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13427253/