preg_replace: добавить номер после обратной ссылки

ситуация

Я хочу использовать preg_replace() чтобы добавить цифру '8' после каждого из [aeiou] .

пример

из

 abcdefghij 

в

 a8bcde8fghi8j 

Вопрос

Как написать строку замены?

 // input string $in = 'abcdefghij'; // this obviously won't work ----------↓ $out = preg_replace( '/([aeiou])/', '\18', $in); 

Это просто пример , поэтому предложение str_replace() не является допустимым ответом.
Я хочу знать, как иметь номер после обратной ссылки в заменяющей строке.

Решение состоит в том, чтобы обернуть backreference в ${} .

 $out = preg_replace( '/([aeiou])/', '${1}8', $in); 

который выведет a8bcde8fghi8j

См. Руководство по этому специальному случаю с обратными ссылками.

Вы можете сделать это:

 $out = preg_replace('/([aeiou])/', '${1}' . '8', $in); 

Вот соответствующая цитата из документов относительно обратной ссылки:

При работе с заменяющим шаблоном, когда за обратной ссылкой сразу следует другое число (то есть: размещение литерального числа сразу после сопоставленного шаблона), вы не можете использовать знакомое обозначение \ 1 для своей обратной ссылки. \ 11, например, будет путать preg_replace (), поскольку он не знает, хотите ли вы, чтобы 1 1 обратная ссылка сопровождалась литералом 1, или \ 11 backreference, а затем ничего. В этом случае решение должно использовать \ $ {1} 1. Это создает изолированную реферрацию за 1 доллар, оставляя 1 как литерал.