Вы можете сделать это с помощью preg_replace_callback
. Используйте это регулярное выражение, которое ищет символ вида <letter><digits>
между границами слова:
\b([A-Z])(\d+)\b
и затем при обратном вызове значение второй группы может быть увеличено:
$formula = 'IF(B15="","",IF(ISNUMBER(A14),A14+1,IF(ISNUMBER(B3),B3+1,1)))';
echo preg_replace_callback('/\b([A-Z])(\d+)\b/', function ($m) {
return $m[1] . (1 + $m[2]);
}, $formula);
Выход:
IF(B16="","",IF(ISNUMBER(A15),A15+1,IF(ISNUMBER(B4),B4+1,1)))
Демонстрация на 3v4l.org
Обновление
Чтобы использовать внешнюю переменную в обратном вызове (как описано в комментариях), отредактируйте код следующим образом:
$formula = 'IF(B15="","",IF(ISNUMBER(A14),A14+1,IF(ISNUMBER(B3),B3+1,1)))';
$tambah = $adding + ($rekord*$highest);
echo preg_replace_callback('/\b([A-Z])(\d+)\b/', function ($m) use ($tambah) {
return $m[1] . ($tambah + $m[2]);
}, $formula);