webForumDet fria alternativet

RegExp problem

4 svar · 353 visningar · startad av M@rtin

M@rtinMedlem sedan dec. 19992 085 inlägg
#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?

nitro2k01Medlem sedan aug. 20039 342 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!

M@rtinMedlem 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?

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

M@rtinMedlem sedan dec. 19992 085 inlägg
#5

Det kan man göra ja! Tack!

123 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
119 ms — hämta tråd, inlägg och bilagor (db)