Вытащить часть из строки, заменить и засунуть обратно

Рейтинг: 1Ответов: 1Опубликовано: 02.11.2014

В общем, есть такая строка:

[mi]link1[/mi] [mt]text[/mt] [mi]link2[/mi] [mi]link3[/mi] [mt]text[/mt]

Нужно вытащить всё ссылки между тегами [mi]. Затем с ними производятся некоторые манипуляции, в результате получаем массив с новыми ссылками, например:

$mas = array('newlink1','newlink2','newlink3');

А затем нужно сохранить всё это дело назад в строку и получить:

[mi]newlink1[/mi] [mt]text[/mt] [mi]newlink2[/mi] [mi]newlink3[/mi] [mt]text[/mt]

Вот что написал:

$str = '[mi]link1[/mi] [mt]text[/mt] [mi]link2[/mi] [mi]link3[/mi] [mt]text[/mt]';
//вытаскиваем все ссылки из тегов
preg_match_all('#\[mi\](.+?)\[\/mi\]#is',$str,$result);
//вытащили, в $result[1] получили массив с ссылками
//...
//манипуляции с ссылками опущены, получен новый массив
$mas = array('_link1','_link2','_link3');
//теперь нужно заменить ссылки в тегах в исходной строке - как?

preg\_replace, как я понимаю, тут не поможет, preg\_split - тоже, ибо попробовал, берёт только первое значение из массива.

Ответы

▲ 2Принят

Если $result - это массив исходных ссылок:

for ($i = 0; $i < count($result); $i++){
str_replace($result[$i], $mas[$i], $str);
}