2013-04-05 2 views
1

Im пытается добавить «00» после $ 1 без пробелов в замене preg_replace.

Мой код:

$count = null; 
$returnValue = preg_replace('/de(.*)y/i', '$1 00', 'delipsumy', -1, $count); 

Я хочу иметь что-то вроде '$ 1' '00' для замены, где выход должен быть:.

lipsum00 (без пробела)

Я уже пробовал что-то вроде «$ 1». '00' и '$ 100', но не работает

Любое предложение?

ответ

1

Этот вопрос рассматривается в method's documentation(курсив добавлен):

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

Таким образом, ваш шаблон замены будет '\${1}00'. Так как пример:

// Output: H__e__ll__o__ W__o__rld 
echo preg_replace("/([aeiou])/", "__\${1}__", "Hello World"); 

в действии: http://codepad.org/orbK5jdw

4

Try:

$returnValue = preg_replace('/de(.*)y/i', '\${1}00', 'delipsumy', -1, $count); 
Смежные вопросы