2

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

有谁知道这是否确实不起作用?

4

3 回答 3

9

您想对键或键和值执行此操作,还是只保留键并处理值?无论哪种情况,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;
}
于 2010-01-01T03:10:53.780 回答
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 用于单词边界。

于 2017-03-10T15:37:18.783 回答
0

如果我理解正确,你想要的是:

$patterns = array_keys($input);
$replacements = array_values($input);
$output = preg_replace($patterns,$replacements,$string);
于 2010-01-01T03:17:36.637 回答