ситуация
Я хочу использовать 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 как литерал.