как заменить некоторые теги и их содержимое пользовательским текстом в php?

у меня есть строка, и я использую preg_match_all, чтобы найти некоторые теги в этой строке:

$str = " 
Line 1: This is a string 
Line 2: [img]http://placehold.it/350x150[/img] Should not be [youtube]SDeWJqKx3Y0[/youtube] included."; 

preg_match_all("~\[img](.+?)\[/img]~i", $str, $img);  
preg_match_all("~\[youtube](.+?)\[/youtube]~i", $str, $youtube);

foreach ($img[1] as $key => $value) {
    echo '<img src="'.$value.'" "/>';
}

foreach ($youtube[1] as $key => $value) {
    echo '<iframe width="420" height="315" src="http://www.youtube.com/embed/'.$value.'" frameborder="0" allowfullscreen> </iframe>';
}

это вернет именно то, что эхо-сигналы с правильными значениями.

но на самом деле я хочу вернуть всю строку с тегами [img] и [youtube], замененными значениями из этих операторов foreach:

Line 1: This is a string 
    Line 2: <img src="http://placehold.it/350x150" "/> Should not be <iframe width="420" height="315" src="http://www.youtube.com/embed/SDeWJqKx3Y0" frameborder="0" allowfullscreen> </iframe> included.

я не ищу стороннюю альтернативу, просто простые функции php.

я думаю об использовании preg_match и некоторых операторов case и switch, но мне пока не удалось

идеи?


person Patrioticcow    schedule 26.04.2012    source источник


Ответы (1)


Вы можете использовать preg_replace

С чем-то вроде этого.

$pattern = Array();
$pattern[0] = "~\[img](.+?)\[/img]~i";
$pattern[1] = "~\[youtube](.+?)\[/youtube]~i";

$replacement = Array();
$replacement[0] = '<img src="${1}" "/>';
$replacement[1] =  '<iframe width="420" height="315" src="http://www.youtube.com/embed/${1}" frameborder="0" allowfullscreen> </iframe>';

$stringToReturn = preg_replace($pattern, $replacement, $str);
person mamadrood    schedule 26.04.2012
comment
похоже это получилось. Я пробовал то же самое ранее, и я получил кучу ошибок, используя http://writecodeonline.com/php/. Вроде так нельзя - person Patrioticcow; 26.04.2012