Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

php regular expression for video swf

iwant to get the video url from a object/embed html source. i read i can use regular expression to get it but me and regular expression are no friends

so heres what i have:

<?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);

this works but is it better in regular expression?

i am using lamp

like image 221
E.G. Avatar asked Nov 28 '11 02:11

E.G.


2 Answers

A regular expression is better for this case because the src might never be at the first attribute, therefore this won't work.

Here's what I recommend:

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);

will output: http://www.domain.com/video/video1.swf

[^>] matches a single character that is not contained within the brackets. [^>] matches any character other than >

["\'] matches src=" or src='

(.*?) Dot (.) means match any character. Star (*) means zero or more times. And question mark (?) means be greedy and keep going as long as the pattern still matches. Put it all together, it means try and match any character, zero or more times, and get as many as you can

/i is case insensitive

Here's more info:

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

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

like image 88
Book Of Zeus Avatar answered Nov 18 '22 12:11

Book Of Zeus


Why don't you use a DOM parser; it's designed to do this kind of work.

$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.

like image 24
alex Avatar answered Nov 18 '22 14:11

alex