Если вы хотите динамическую замену c, вы можете использовать шаблон с 2 группами захвата. В первой группе вы фиксируете то, что хотите сохранить в замене.
Значение второй группы захвата можно использовать в качестве ключа для индексации в массиве примеров.
Вы можете использовать и preg_match_callback для возврата строки замены.
Если текст до и после этой группы захвата должен быть одинаковым, вы можете использовать обратную ссылку \1
([^(\r\n]+)\(\?(?|P?<([^>]+)>|'([^']+)')[^)\r\n]+\)\1
О шаблоне
([^(\r\n]+)
Захват группа 1 Совпадение 1+ раз с любым символом, кроме (
или новой строкой \(\?
Совпадение (?
(?|
Группа сброса ветви, это будет группа 2 P?<([^>]+)>
Соответствует необязательному P
и захватывает в группе то, что находится между <
и >
|
Или '([^']+)'
Захват в группе между '
)
Закрытие группы сброса ветви [^)\r\n]+\)
Матч 1 + раз любой символ, кроме )
или новой строки, затем сопоставьте )
\1
обратную ссылку на группу 1
regex demo | Php демо
Например
$exampleArray = [
'value' => 'something',
'id' => '123',
'number' => '828',
];
$re = '/([^(\r\n]+)\(\?(?|P?<([^>]+)>|\'([^\']+)\')[^)\r\n]+\)\1/';
$str = <<<STR
something(?<value>\d+)something
another(?P<id>\d+)another
someone(?'number'\d+)someone
STR;
$result =preg_replace_callback($re, function($m) use ($exampleArray) {
return $m[1] . $exampleArray[$m[2]] . $m[1];
}, $str);
echo $result;
Выход
somethingsomethingsomething
another123another
someone828someone