preg_replace, хочется странного

drone76

Новичок
preg_replace, хочется странного

День добрый!

Делаю автоссылки на сайте. Пары слово/url берутся из базы, куда их юзеры забивают.
в итоге получаются два массива $search и $replace со списками слов и урлов для подстановки. Юзеры иногда забивают названия и в кавычках и просто:

PHP:
$doc=<<<EOT
А вот "Вася" Пупкин по лесу идет
EOT;
$search=array('@"Вася"@i', "@Вася@i", etc...);
$replace=array("<a href=url1>"Вася"</a>", "<a href=url2>Вася</a>", etc..);
$text = preg_replace($search, $replace, $doc);
В итоге после preg_replace получается что то типа
PHP:
<a href=url1>"<a href=url2>Вася</a>"</a>
Как избежать этой рекурсивности в работе preg_replace? Хочется чтобы замена происходила один раз по одному шаблону (не limit=1).
Заранее thnx, голову уже сломал =(
 

ksnk

прохожий
Можно попробовать менять "Вася" на <a...>В~ася</a>. В смысле - вставлять после первого символа "слова" неиспользуемый символ, к примеру ~ или еще лучше - \x01. После замены, str_replace'ом убрать все такие символы обратно. Правда, спастить от комбинаций "Вася" + "Ася" будет сложно :)

-~{}~ 20.03.06 16:29:

А вот так, будет еще и правильно :)
PHP:
$doc='А вот "Вася" Пупкин по лесу идет ';
$search=array('@"Вася"@i', "@Вася@i"); 
$repl0=array("~0x1~",'~0x2~'); 
$replace=array("<a href=url1>'Вася'</a>", "<a href=url2>Вася</a>"); 
$text = preg_replace($search, $repl0, $doc);
$text = str_replace($repl0, $replace, $text);
 
Сверху