php preg_replace question - PullRequest
       8

php preg_replace question

1 голос
/ 05 февраля 2010

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

$text = '[iframe=200x200]http://stackoverflow.com[iframe] ';
$text = preg_replace(
    '/\[iframe=(.*?)x(.*?)\](.*?)\[\/iframe\]/ms', 
    '<iframe style="border: 1px solid rgb(204, 204, 204); width: \1px; height: \2px;" src="\3"></iframe>', 
    $text
);
echo $text;

Почему это не работает?

Ответы [ 2 ]

2 голосов
/ 05 февраля 2010

В вашей входной строке есть ошибка. / в закрывающем теге отсутствует

[IFrame = 200x200] http://stackoverflow.com[/iframe]

2 голосов
/ 05 февраля 2010

Попробуйте:

$text = preg_replace('/\[iframe=(.*?)x(.*?)\](.*?)\[iframe\]/ms',
        '<iframe style="border: 1px solid rgb(204, 204, 204); width: \1px; height: \2px;" src="\3"></iframe>',
        $text);

В \[\/iframe\] было несколько нежелательных слешей, которые нужно было изменить на \[iframe\]

EDIT:

На самом деле ваша входная строка выглядит неправильно, так как у нее нет закрывающего тега iframe:

$text = '[iframe=200x200]http://stackoverflow.com[iframe] ';

должно быть

$text = '[iframe=200x200]http://stackoverflow.com[/iframe] ';

В тех случаях, когда ваша строка содержит /, вы можете использовать другой разделитель, чтобы избежать экранирования /, найденного в строке. Что-то вроде:

$text = preg_replace('#\[iframe=(.*?)x(.*?)\](.*?)\[/iframe\]#ms',
            '<iframe style="border: 1px solid rgb(204, 204, 204); width: \1px; height: \2px;" src="\3"></iframe>',
            $text);
...