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

Php 如何使用preg_replace返回匹配数组和结果字符串?,php,arrays,Php,Arrays,我需要完成两件事,我想知道preg_replace能否同时完成这两件事 我需要更改一个字符串。现在我正在使用preg_替换: preg_replace($terms,$replace_with,$string,1); 其中,$terms是一个术语数组,$replace_with也是一个数组 但是我还需要在一个单独的数组中返回匹配项(以便稍后更新其他值),因为有几个术语,我不知道哪个匹配 我知道如何实现这一点的唯一方法是首先运行preg_match,默认情况下它返回matches数组,然后pre

我需要完成两件事,我想知道preg_replace能否同时完成这两件事

我需要更改一个字符串。现在我正在使用preg_替换:

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

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

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

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

是否有方法返回字符串,并仅替换带有preg\u的匹配项?


我的最终目标是修改$string(目前是通过preg_replace实现的),但也要有一个匹配了$terms的数组

否,但如果
$terms
$replace\u with
具有数字键(无空格),则可以使用
preg\u replace\u回调

$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\u replace[\u callback]
做的事情与使用数组作为第一个参数或使用
preg\u replace\u callback\u数组
做的事情完全相同。(即:字符串被逐项解析一次。)

我做了,但我看不出这有什么帮助。我不想分组匹配并用它们替换字符串。我需要类似于preg_match返回的$matches数组的东西,以便在preg_replace之外使用它。你能给我举个例子吗?
$replace\u是数组还是字符串?也许
preg\u match\u all()
,然后
str\u replace()
。$replace\u with也是数组。谢谢。我要试试这个。我之前已经调查过preg_replace_回调,但我想确保我没有遗漏一些preg_replace选项。