PHP регулярное выражение для видео SWF - PullRequest
14 голосов
/ 28 ноября 2011

я хочу получить URL-адрес видео из html-источника object / embed. я читаю, я могу использовать регулярное выражение, чтобы получить его, но я и регулярное выражение не друзья

вот что у меня есть:

<?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 ]

14 голосов
/ 28 ноября 2011

Регулярное выражение лучше для этого случая, потому что 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

1 голос
/ 28 ноября 2011

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

CodePad .

...