webForumDet fria alternativet

RegExp problem

PHP

4 svar · 353 visningar · startad av M@rtin

Medlem sedan dec. 19992 085 inlägg
Frågan#1

Jag skrev en funktion som man kunde skicka in en url till en youtube video i och få ut embed-koden för videon. Det fungerar bra men det blev en hel del kod och jag tänkte att det måste gå att göra på typ en rad med reguljära uttryck. Tyvärr är jag väldigt dålig på regexp och jag får det inte riktigt att fungera.

En url ser ut så här:
http://www.youtube.com/watch?v=4EszplXQzeA
men kan även ha fler querystring:
http://www.youtube.com/watch?v=4EszplXQzeA&search=citro

Embed koden ser ut så här:

<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/4EszplXQzeA"></param><embed src="http://www.youtube.com/v/4EszplXQzeA" type="application/x-shockwave-flash" width="425" height="350"></embed></object>

Mitt försök till funktion ser ut så här:

   function get_embedded_content($url){
      $embed = preg_replace('#[url]http://(www\.)?youtube.com/watch\?v=([/url][A-Za-z0-9]+)(.+?)#i','<object width="425" height="350"><param name="movie" value="$2"></param><embed src="http://www.youtube.com/v/$2" type="application/x-shockwave-flash" width="425" height="350"></embed></object>',$url);
      return $embed;
   }

Det fungerar ganska bra men om man har fler querystrings så får man dem kvar på slutet, jag vill att de ska försvinna, det är därför jag försökt med (.+?) i slutet men det gör ingen verkan.

Jag skulle även vilja att om man skickar in en helt annan url så får man bara en tom sträng tillbaka.

Någon som vet hur jag kan lösa detta?

Medlem sedan aug. 20039 340 inlägg
#2

Gör så här:

<?PHP

   function get_embedded_content($url){
      $test = preg_match('#http://(www\.)?youtube.com/watch\?v=([A-Za-z0-9]+)#i',$url,$matches);

      if (!$test)
        return "<i>Detta är inte en videokod... ):</i>";

      echo '<object width="425" height="350"><param name="movie" value="' . $matches[2] . '"></param><embed src="http://www.youtube.com/v/' . $matches[2] . '" type="application/x-shockwave-flash" width="425" height="350"></embed></object>';
   }
// Testa
echo get_embedded_content('http://www.google.se');
echo "<br />";

echo get_embedded_content('http://www.youtube.com/watch?v=4EszplXQzeA&search=citro');
echo "<br />";

echo get_embedded_content('http://www.youtube.com/watch?v=4EszplXQzeA');
echo "<br />";

?>

/Edit: Pyttepluttfel korrigerat!

Medlem sedan dec. 19992 085 inlägg
#3

Ah det fungerade ju jättebra, tackar!

Fast om man har en annan querystring före v så funkar det inte, jag tänkte inte på den möjligheten innan. Finns det något enkelt sätt att lösa det?

Medlem sedan jan. 20021 122 inlägg
#4

Du skulle ju kunna lägga till .* före v, eftersom det kommer matcha alla eventuella tecken innan.

Medlem sedan dec. 19992 085 inlägg
#5

Det kan man göra ja! Tack!

261 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)