2013-07-24 3 views
0

Я пытаюсь разработать пакетный поиск и замену для большого текстового файла с использованием preg_replace. Я не делал этого раньше, но я думаю, что в основном понимаю этот процесс. У меня нет проблем с прямой заменой x на y. (Числа 0 и 2 в приведенных ниже массивах работают нормально.) Но я не могу понять, как сделать вставку, которая хранит согласованный текст. Я знаю, что это должно быть просто, и я попытался подражать кучу примеров.preg_replace in php not

Когда я запускаю приведенный ниже код, предложение превращается в «Улица Кролика в ночном городе». Но я пытаюсь превратить «Mabbot» в «MabbotRabbit». Как я могу сохранить «Маббот» на месте?

Спасибо!

<?php 

$content = "The Mabbot street entrance of nighttown"; 

$patterns = array(); 
$patterns[0] = '/\n/'; 
$patterns[1] = '/Mabbot/'; 
$patterns[2] = '/entrance/'; 
$replacements = array(); 
$replacements[0] = '<br/>'; 
$replacements[1] = '$1Rabbit'; 
$replacements[2] = 'mentrance'; 
ksort($patterns); 
ksort($replacements); 
echo preg_replace($patterns, $replacements, $content); 

?> 
+1

Используйте '$ 0', чтобы подставить совпадающую строку, а не' $ 1'. – Barmar

+0

Бинго. Спасибо! – user2193632

ответ

1

Изменить

replacements[1] = '$1Rabbit'; 

в

replacements[1] = '$0Rabbit'; 

$1, $2, и так далее заменяются спичкой для N-й группы захвата, в то время как $0 заменяется на весь матч.