Как использовать substr при регулярном выражении preg replace - PullRequest
0 голосов
/ 12 декабря 2010

я делаю bbcode для видео на YouTube. Пользователь может опубликовать видео в виде bbcode, например, как [youtube] http://www.youtube.com/watch?v=ihK2pPcDSHM[/youtube]. Далее, он преобразует его в HTML-код. Но вместо видео я хочу показать также изображениевидео.Поэтому я делаю это так:

$string = preg_replace("~\[yt]http://www.youtube.com/watch\?v=(.*)\[/yt]~Uis","<img src=\"http://img.youtube.com/vi/\\1/0.jpg\" />", $string);

Показывает изображение, но когда кто-то ставит URL-адрес, например:

http://www.youtube.com/watch?v=ihK2pPcDSHM&feature=channel

Тогда URL-адрес изображения становится http://img.youtube.com/vi/ihK2pPcDSHM&feature=channel1/0.jpg, что не приводитк действительному изображению.Я пытаюсь изменить \\1 на ".substr('\\1', 0,11).", но это не дает никакого результата.

Есть предложения, чтобы решить эту проблему?Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 декабря 2010

Просто скажите своему регулярному выражению, чтобы он остановился на первом & символе:

$string = preg_replace("~\[yt]http://www.youtube.com/watch\?v=([^\\&]*)\[/yt]~Uis","<img src=\"http://img.youtube.com/vi/\\1/0.jpg\" />", $string);
0 голосов
/ 12 декабря 2010

Попробуйте другой шаблон, например:

~\[yt]http://www\.youtube\.com/watch\?v=([a-z0-9-_]+).*?\[/yt]~is
...