我需要完成两件事,我想知道两者是否可以用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的数组。
答案 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
完全相同。 (即:字符串按项解析一次。)