регулярное выражение 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);

Это работает, но лучше ли это в регулярном выражении?

Я использую лампу

Author: E.G., 2011-11-28

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 является нечувствительным к регистру

Вот дополнительная информация:

Http://en.wikipedia.org/wiki/Regular_expression

Http://www.regular-expressions.info/reference.html

 14
Author: Book Of Zeus, 2011-11-28 11:52:33

Почему бы вам не использовать синтаксический анализатор 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.  
   }
}

Кодовый контроллер.

 1
Author: alex, 2011-11-28 03:02:16