如何使用preg_replace返回匹配数组和结果字符串?

时间:2017-01-11 16:20:19

标签: php arrays

我需要完成两件事,我想知道两者是否可以用preg_replace完成。

我需要改变一个字符串。现在我正在使用preg_replace:

preg_replace($terms,$replace_with,$string,1);

其中$ terms是一个术语数组,$ replace_with也是一个数组。

但是我还需要在一个单独的数组中返回匹配项(稍后更新其他值),因为有几个术语,我不知道哪一个匹配。

我知道如何实现这一目标的唯一方法是首先运行preg_match,默认情况下返回matches数组,然后preg_replace实际用新值替换字符串。

有没有办法返回字符串,只与preg_replace匹配?

我的最终目标是更改$ string(目前使用preg_replace完成),但也是一个匹配$ terms的数组。

1 个答案:

答案 0 :(得分:0)

不,但如果$terms$replace_with有数字键(无间隙),您可以使用preg_replace_callback

$matches = [];
foreach($terms as $k=>$term) {
    $rep = $replace_with[$k];
    $string = preg_replace_callback($term, function ($m) use ($rep, &$matches) {
        $matches[] = $m[0];
        return $rep;
    }, $string, 1);
}

请注意,使用foreach + preg_replace[_callback]与使用数组作为第一个参数的preg_replace或使用preg_replace_callback_array完全相同。 (即:字符串按项解析一次。)