регулярное выражение php для swf видео
Я хочу получить URL-адрес видео из объекта/встроенного html-источника. я читал, что могу использовать регулярное выражение, чтобы получить его, но мы с регулярным выражением не друзья
Итак, вот что у меня есть:
<?php
function src($text) {
$text = str_replace('"', '', $text);
$text = str_replace('src=', '', $text);
$temporary = explode('<embed', $text);
$temporary = $temporary[1];
$temporary = explode(' ', trim($temporary));
return $temporary[0];
}
$html = '
<object width="180" height="220">
<param name="movie" value="http://www.domain.com/video/video1.swf"></param>
<embed src="http://www.domain.com/video/video1.swf" type="application/x-shockwave-flash" width="180" height="220"></embed>
</object>
';
echo src($html);
Это работает, но лучше ли это в регулярном выражении?
Я использую лампу
2 answers
Регулярное выражение лучше для этого случая, потому что src
может никогда не быть в первом атрибуте, поэтому это не сработает.
Вот что я рекомендую:
function src($html) {
if(preg_match('#<embed[^>]*?src=["\'](.*?)["\'](.*?)></embed>#si', stripslashes($html), $src)) {
return $src[1];
}
return ''; // or any other error if you need
}
echo src($html);
Выведет: http://www.domain.com/video/video1.swf
[^>]
соответствует одному символу, который не содержится в скобках. [^>] соответствует любому символу, кроме >
["\']
совпадения src="
или src='
(.*?)
Точка (.) означает совпадение с любым символом. Звезда (*) означает ноль или более раз. И знак вопроса (?) означает быть жадным и продолжать идти до тех пор, пока шаблон все еще совпадает. Сложите все это вместе, это означает, что попробуйте сопоставить любой символ, ноль или более раз, и получите столько, сколько сможете
/i
является нечувствительным к регистру
Вот дополнительная информация:
Почему бы вам не использовать синтаксический анализатор DOM; он предназначен для выполнения такого рода работы.
$dom = new DOMDocument;
$dom->loadHTML($html);
$embed = $dom->getElementsByTagName('embed');
if ($embed->length) {
$embed = $embed->item(0);
if ($embed->hasAttribute('src')) {
$src = $embed->getAttribute('src');
// `$src` holds the `src` attribute of the `embed` element.
}
}