PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Regex Problem


SkriptSuppe
26.03.2008, 18:56:57
Hallo,

ich versuche mich gerade an meinem Youtube preg_replace Regex. Ich komme aber leider nicht weiter und das liegt vermutlich daran, dass die diese "Sprache" nicht meine Stärke ist.

Ich benötige die Video ID (momentan \\2 )

!\[(?i)Youtube\](.*)youtube.com\/watch\?v=[_-a-zA-Z0-9]?(.*)\[(?i)/Youtube\]!Uis

Dies funktioniert bereits für Videos mit folgender URL:

Zum Beispiel

http://www.youtube.com/watch?v=23GVj56ShRc

aber nicht für Videos die ein & enthalten:

http://www.youtube.com/watch?v=w5NwhLbx1qk&feature=user

?(.*) bedeutet doch: und vielleicht beliebig viele Zeichen in dieser Zeile

Was mach ich falsch ?

mfg

|Coding
26.03.2008, 20:01:53
Warum greifst Du nicht nur die Video ID ab, der Rest der URL scheint für Dich nicht von belang zu sein.

SkriptSuppe
26.03.2008, 21:10:27
Warum greifst Du nicht nur die Video ID ab, der Rest der URL scheint für Dich nicht von belang zu sein.

Wäre möglich... aber umständlicher und ich hoffe jemand kennt eine elegantere Lösung ohne extra Zeilen Code

|Coding
26.03.2008, 23:44:07
Hi!

Warum "...extra Zeilen Code..."?

Beispiel:

<?php
$str = 'http://www.youtube.com/watch?v=w5NwhLbx1qk

http://www.youtube.com/watch?v=w5NwhLbx1qk&feature=user

http://www.youtube.com/watch?v=w5NwhLbx1qk&feature=user&noch=mehr';

$pattern = '|\[YOUTUBE\].*\?v=([_\-a-zA-Z0-9]+).*\[/YOUTUBE\]|i';

preg_match_all ( $pattern, $str, $matches );

print ( $matches[0][0] . ' -> ' . $matches[1][0] . '<br />' .
$matches[0][1] . ' -> ' . $matches[1][1] . '<br />' .
$matches[0][2] . ' -> ' . $matches[1][2] );
?>

SkriptSuppe
27.03.2008, 09:20:33
Warum "...extra Zeilen Code..."?

Da dies eine BB Code Funktion werden soll. Deine Funktion ist zwar einwandfrei, aber relativ unflexibel für meine Zwecke (=> Gästebucheinträge).

Ich habe es jetzt gelöst (Umsetzung mit preg_replace):

!\[(?i)Youtube\](.*)youtube.com\/watch\?v=[_-a-zA-Z0-9]?(.*)(&.*)*\[(?i)/Youtube\]!Uis

|Coding
27.03.2008, 14:07:21
Hi!

"unflexibel" kann ich gerade nicht ganz nachvollziehen, vielleicht reden wir aber auch etwas an einander vorbei. Magst Du vielleicht kurz im groben mal aufzählen, was Dir für den Funktionsumfang der BBCode-Funktion wichtig ist und was sie im Einzelnen können sollte?

Ist immer besser wenn wir etwas mehr wissen als vielleicht nötig, da wir dann auch besser oder umfangreicher helfen können.

SkriptSuppe
27.03.2008, 14:53:18
Das Problem ist ja gelöst, aber zu deiner Funktion noch:

Bei mir ist der Inhalt der $str ja variabel, des Weiteren habe ich nicht immer die gleiche Anzahl von Videos. Ich "ummantle" aber jede ID sofort wieder mit Quellcode (innerhalb von $str), um das Video per PopUp / Webplayer einzubinden. Mit deiner Methode kann ich dies ja nur mit mindestens 2 weiteren Schritten $str schaffen.

Ich glaube ich habe mich einfach nicht klar genug am Anfang ausgedrückt - sorry.

Auf jeden Fall vielen Dank für deinen Ansatz

Noch mein Quellcode zum Schluss (nicht sehr übersichtlich ;) )

$eintrag = preg_replace("!\[(?i)Youtube\](.*)youtube.com\/watch\?v=[_-a-zA-Z0-9]?(.*)(&.*)*\[(?i)/Youtube\]!Uis", "<div class=\"youtube\"><a href=\"gbs-database/gbs-video.php?typ=y&amp;id=\\2\" target=\"_blank\" rel=\"lyteframe\" rev=\"width:446px; height:380px; scrolling:no;\" title=\"&lt;a href=&quot;http://www.youtube.com/watch?v=\\2&quot; target=&quot;_blank&quot;&gt;Link zum Video&lt;/a&gt;\"><img src=\"http://img.youtube.com/vi/\\2/1.jpg\" border=\"0\" alt=\"Youtube Thumbnail\" /></a><span><img src=\"gbs-database/icons/youtube-icon.png\" width=\"16\" height=\"16\" alt=\"Youtube Icon\" /></span></div>", $eintrag);

|Coding
27.03.2008, 16:19:27
Das obige Beispiel war ja auch nicht für "copy & paste" gedacht, weil ich nicht hellsehen kann :-)
Der eigentliche Betreff des Beispiels war auch nur der reguläre Ausdruck, der Rest war da zu gedacht, die Funktionsweise zu testen.

Tumasch
28.03.2008, 15:53:55
such mal nach parse_url und parse_str ...