在preg_replace的文档中,它说你可以使用索引数组来替换多个字符串。我想用关联数组做这个,但它似乎不起作用。
有人知道这确实不起作用吗?
答案 0 :(得分:5)
您想要在键或键和值上执行此操作,还是仅保留键并处理值?无论哪种情况,array_combine()
,array_keys()
和array_values()
都可以实现这一目标。
关键:
$keys = array_keys($input);
$values = array_values($input);
$result = preg_replace($pattern, $replacement, $keys);
$output = array_combine($result, $values);
关于键和值:
$keys = array_keys($input);
$values = array_values($input);
$newKeys = preg_replace($pattern, $replacement, $keys);
$newValues = preg_replace($pattern, $replacement, $values);
$output = array_combine($newKeys, $newValues);
关于值保留键:
$keys = array_keys($input);
$values = array_values($input);
$result = preg_replace($pattern, $replacement, $values);
$output = array_combine($keys, $result);
所有这些都假定一个类似的函数:
function regex_replace(array $input, $pattern, $replacement) {
...
return $output;
}
答案 1 :(得分:1)
如果我理解正确,你想要的是:
$patterns = array_keys($input);
$replacements = array_values($input);
$output = preg_replace($patterns,$replacements,$string);
答案 2 :(得分:1)
花了很多时间在这上面,所以会添加我的答案
$str = "CT is right next to NY";
$list = array('CT'=>'connenticut', 'NY'=>'New York', 'ME' => 'Maine');
$list = get_json();
$pattern = array_keys($list);
$replacement = array_values($list);
foreach ($pattern as $key => $value) {
$pattern[$key] = '/\b'.$value.'\b/i';
}
$new_str = preg_replace( $pattern,$replacement, $str);
确保使用/ delimiters /进行正则表达式模式匹配。 \ b用于单词边界。