2013-09-08 2 views
3

У меня проблема с переменной preg_replace и $ 1 + без пробела между $ 1 и переменной.

У меня есть этот код:

$replace_id = 5000; 
$search = 1000; 
$movies = '[1000,2000,2300,1234]'; 
$new_movies = preg_replace('#(,|\[)'.$search.'(,|\])#Uis','$1'.$replace_id.'$2',$movies); 
echo $new_movies; 

Выход:

000,2000,2300,1234] 

Но я хочу, чтобы этот вывод:

[5000,2000,2300,1234] 

Когда я использую preg_replace с пробелом между $ 1 и $ replace_id:

$new_movies = preg_replace('#(,|\[)'.$search.'(,|\])#Uis','$1 '.$replace_id.'$2',$movies); 

Он работает отлично, но мне нужно это без пространства внутри!

У вас есть идея?

Спасибо!

+0

Ваш второй код идентичен первому, но я прав, полагая, что вы пытаетесь заменить с рисунком, как '$ 15000' где' $ 1' является токеном, а '5000' - текстовым литералом? – Dave

+0

О, извините, я добавил пространство сейчас;) Да, это то, что я имею в виду. – Wikunia

+0

ОК, в этом случае мой ответ должен вам помочь. – Dave

ответ

5

Из документации:

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

http://php.net/manual/en/function.preg-replace.php

Так что я хотел бы использовать '${1}'.$replace_id

+0

Спасибо! На самом деле это не «\ $ {1}». $ Replace_id, но «$ {1}». $ Replace_id (без косой черты) – Wikunia

+1

@Wikunia ah ok. Я размышлял. К сожалению, в документации редко бывает ясно, использует ли она '' '' или '' '' quotes ... Во всяком случае, исправлено. – Dave