将关联数组与preg_replace一起使用

时间:2010-01-01 03:07:16

标签: php arrays preg-replace associative

在preg_replace的文档中,它说你可以使用索引数组来替换多个字符串。我想用关联数组做这个,但它似乎不起作用。

有人知道这确实不起作用吗?

3 个答案:

答案 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用于单词边界。