php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.02.2011, 23:59  
Benutzer
 
Registriert seit: 19.05.2009
Beiträge: 38
hjw-kunstwerk befindet sich auf einem aufstrebenden Ast
Standard RegEx für Youtube Kanalseite VideoID

Guten Tag,

ich bin habe die Suchfunktion hier im Forum sowie von Google genutzt, doch leider konnte ich mir noch nicht weiterhelfen, aus diesem Grund wende ich mich nun hier an RegEx Spezialisten.

Seit einiger Zeit hat Youtube auf der Kanalseite leider eine andere URL Struktur wie auf den Einzelseiten, folgend drei Beispiele:

Bsp. URL Video auf Einzelseite:
http://www.youtube.com/watch?v=7TGmg7SKpOw
(Für diese Beispiel habe ich eine RegEX die ich zur Zeit einsetze!)

Bsp. URL gleiches Video auf Einzelseite durch Empfehlung:
http://www.youtube.com/watch?v=7TGmg...eature=related
(An diesem Beispiel funktioniert meine RegEx leider nur halb, denn ab dem & 'und' bricht die RegEx ab)

Bsp. URL Video auf Youtube Kanalseite:
http://www.youtube.com/user/hjwkunst.../0/XrAVL0eWmWo
(Dafür konnte ich noch keine RegEx erstellen, da ich mir nicht erklären kann wie ich dies angehen muss, darum bitte ich hier um Unterstützung.

Mein jetziges Pattern:
PHP-Code:
$pattern '/((http|ftp)\:\/\/)?([w]{3}\.)?(youtube\.)([a-z]{2,4})(\/watch\?v=)([a-zA-Z0-9_-]+)/'
Die Methode preg_replace:
PHP-Code:
preg_replace($pattern'<iframe title="YouTube video player" width="300" height="255" src="http://www.youtube.com/embed/$7" frameborder="0" allowfullscreen></iframe>'$url_im_text); 
Meine Frage:
Wie kann ich die RegEx erweitern, sodass sie mir auch den Teil in der Url ab einen & (kaufmännischen und) ersetzt und wie könnte ich mit dieser RegEx zusätzlich noch Links im Text ersetzen welche von einer Youtube Kanalseite stammen? (siehe Bsp. oben)

Noch ne Frage:
Wie könnte ich die RegEx noch so verbessern das die Youtube URL's sowohl in einem a href Tag findet als auch ohne einen?


Ich bin um jede Antwort dankbar und lerne gerne hinzu.
Kenn mich leider nur sehr gering mit Regulären Ausdrücken aus, deshalb bitte ich mich zu verbessern, falls ich mich in irgendeiner Weise falsch ausgetrückt habe.

mfg
hjw-kunstwerk ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.02.2011, 02:05  
Gesperrt
 
Registriert seit: 03.12.2010
Beiträge: 860
PHP-Kenntnisse:
Anfänger
coola wird schon bald berühmt werden
Standard

Zitat:
http://www.youtube.com/user/hjwkunst.../0/XrAVL0eWmWo
(Dafür konnte ich noch keine RegEx erstellen, da ich mir nicht erklären kann wie ich dies angehen muss, darum bitte ich hier um Unterstützung.
PHP-Code:
<?php
$str
='http://www.youtube.com/user/hjwkunstwerk#p/u/0/XrAVL0eWmWo';
$arr=parse_url($str);
if((
$user=substr(strrchr($arr['path'],'/'),1))!==false)
echo 
$user."<br />\n";
$fragments=explode('/',$arr['fragment']);
var_dump($fragments);
?>
Was 'p/u/0/XrAVL0eWmWo' bedeutet, weiß ich nicht. Ich vermute, 'p' steht für 'play' und 'u' steht für 'uploads'.

Was ist eigentlich eine "Kanalseite"? Eine Art eigener Fernsehsender, wo man Videos nur zu bestimmten Zeiten anbietet?

Geändert von coola (25.02.2011 um 01:02 Uhr).
coola ist offline   Mit Zitat antworten
Alt 20.02.2011, 08:46  
Benutzer
 
Registriert seit: 19.05.2009
Beiträge: 38
hjw-kunstwerk befindet sich auf einem aufstrebenden Ast
Standard Suche Hilfe mit der RegEx für Youtube Kanalseite VideoID

@coola vielen Dank fürs Antworten.

Zitat:
<?php
$str='http://www.youtube.com/user/hjwkunstwerk#p/u/0/XrAVL0eWmWo';
$arr=parse_url($str);
if(($user=substr(strrchr($arr['path'],'/'),1))!==false)
echo $user."<br />\n";
$fragments=explode('/',$arr['fragment']);
var_dump($fragments);
?>

Ich habe auch schon überlegt dies mit parse_url zu erledigen, doch leider hab ich festgestellt, dass die URL's der Youtube Kanalseiten scheinbar unterschiedlich sind wie diesese Bsp. zeigen sollen:

PHP-Code:
$str='http://www.youtube.com/user/Kanalseitenname#p/u/0/VQCe8kJY4eg'
Ausgabe nach parse_url: Kanalseitenname array(4) { [0]=> string(1) "p" [1]=> string(1) "u" [2]=> string(1) "0" [3]=> string(11) "VQCe8kJY4eg" }

PHP-Code:
$str='http://www.youtube.com/user/Kanalseitenname#p/a/u/2/MPoBtkDLl2U'
Ausgabe nach parse_url: Kanalseitenname array(5) { [0]=> string(1) "p" [1]=> string(1) "a" [2]=> string(1) "u" [3]=> string(1) "2" [4]=> string(11) "MPoBtkDLl2U" }

PHP-Code:
$str='http://www.youtube.com/user/Kanalseitenname?feature=chclk#p/c/187CE54721BCC027/3/FlQkmD6SBOM'
Ausgabe nach parse_url: Kanalseitenname array(5) { [0]=> string(1) "p" [1]=> string(1) "c" [2]=> string(16) "187CE54721BCC027" [3]=> string(1) "3" [4]=> string(11) "FlQkmD6SBOM" }

Diese Bsp. sollen verdeutlichen, dass es leider einmal ein Array mit 4 und teilweise mit 5 ergibt. Für mich wäre es daher sehr wichtig bei jedem Aufruf der Seite immer nur mit einer Methode die URL anzuzeigen, doch das funktioniert so mit parse_url leider nicht. Ich vermute, dass es wohl doch auf eine RegEx rauslaufen wird, denn wenn ich weiter mit parse_url arbeite habe ich momentan noch keine Idee wie ich mit einem Aufruf alle möglichen Varianten von Youtube URL's parsen und mit preg_replace umsetzen könnte.


Dringende Frage:
Wie könnte ich die RegEx siehe 1. Post erweitern, sodass sie mir auch den Teil in der Url ab einen & (kaufmännischenund) ersetzt und wie könnte ich mit dieser RegEx zusätzlich noch URL's im Text ersetzen welche von einer Youtube Kanalseite stammen? (siehe Bsp. oben)

Weitere Frage:
Wie könnte ich die RegEx noch so verbessern, dass die Youtube URL's sowohl in einem a href Tag gefunden werden als auch ohne einen a href Tag?


Ich bin um jede Antwort dankbar und lerne gerne hinzu.
Hoffe ich habe mich verständlich ausgedrückt. mfg


Definition Kanalseite: Ein Kanal ist die Seite, die von allen YouTube-Besuchern angezeigt werden kann und unter anderem die Profilinformationen, Videos und Favoriten des Nutzers enthält.
hjw-kunstwerk ist offline   Mit Zitat antworten
Alt 25.02.2011, 18:00  
Benutzer
 
Registriert seit: 19.05.2009
Beiträge: 38
hjw-kunstwerk befindet sich auf einem aufstrebenden Ast
Standard

Guten Abend,

ich habe mein Pattern nun etwas erweitert, sodass jetzt auch nach vielen Tests bei mir alle getesteten URL's gematcht wurden. Doch leider hat sich jetzt ein Neues Problem ergeben, dass mit diesem Pattern kein 'ENDE' im Sinn eines Leerzeichens gefunden wird.

PHP-Code:
$text 'dfsdf www.google.de'//matcht alles richtig
$text 'dfsdf www.google.de rfgtergrt'//matcht mit LEERZEICHEN und TEXT???

preg_match('/((http|https|ftp)?(:\/\/)?(www)?(([a-zA-Z0-9-_]+\.|\.)+([a-zA-Z0-9-_]+.)+([a-zA-Z]{2,4})?((\/\?|\?)?(([A-Za-z0-9-_])?((\?|=|&)?[A-Za-z0-9-_])?((=|&)?[A-Za-z0-9-_])?((=|&)?[A-Za-z0-9-_]?)*)?(.[^\S])*?)))/is'$text$urloutput);            

print_r($urloutput); 
Meine Frage:
Was mache ich Falsch, dass die RegEX nicht das Ende einer URL erkennt, meines Wissen sollte dies doch mit ^\S funktionieren, oder?? Ich wäre sehr dankbar, wenn Du einen Blick über mein Pattern werfen könntest.

Vielen Dank im Vorraus, für die Bemühungen. mfg

Geändert von hjw-kunstwerk (25.02.2011 um 18:09 Uhr).
hjw-kunstwerk ist offline   Mit Zitat antworten
Alt 25.02.2011, 18:53  
Erfahrener Benutzer
 
Registriert seit: 03.03.2010
Beiträge: 221
PHP-Kenntnisse:
Fortgeschritten
RustyXXL befindet sich auf einem aufstrebenden Ast
Standard

end()
RustyXXL ist offline   Mit Zitat antworten
Alt 25.02.2011, 19:14  
Benutzer
 
Registriert seit: 19.05.2009
Beiträge: 38
hjw-kunstwerk befindet sich auf einem aufstrebenden Ast
Standard

Gibt es nicht evtl. auch die Möglichkeit, das Ende im Pattern zu bestimmen?
Mit end() bekomme ich leider nicht nur die URL die eigentlich wollte??
hjw-kunstwerk ist offline   Mit Zitat antworten
Alt 25.02.2011, 19:56  
Erfahrener Benutzer
 
Registriert seit: 03.03.2010
Beiträge: 221
PHP-Kenntnisse:
Fortgeschritten
RustyXXL befindet sich auf einem aufstrebenden Ast
Standard

Sorry, hatte den Thread nur überflogen, da ich heute allgemein nicht all zu aufmerksam bin, und dachte es ging Dir nur um die ID...an die wärst Du über parseurl + end() heran gekommen...
Vergiss meinen Hinweis also einfach...sry
RustyXXL ist offline   Mit Zitat antworten
Alt 26.02.2011, 07:02  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.730
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Zitat:
Zitat von hjw-kunstwerk Beitrag anzeigen
Was mache ich Falsch, dass die RegEX nicht das Ende einer URL erkennt, meines Wissen sollte dies doch mit ^\S funktionieren, oder??
Suchst du vielleicht sowas?

Code:
'~(?:https?://|ftp://|www\.)\S+~i'
[^\S] ist übrigens äquivalent zu \s.
__________________
Blog | Buch | Kaloa
mermshaus ist gerade online   Mit Zitat antworten
Alt 04.03.2011, 17:27  
Benutzer
 
Registriert seit: 19.05.2009
Beiträge: 38
hjw-kunstwerk befindet sich auf einem aufstrebenden Ast
Standard

Guten Tag,

so erstmal herzlichen Dank an @mermshaus das hat mich schon weiter geholfen.

Ich habe nun schon wieder eine Frage @all, da ich nun im ersten Schritt dazu übergegangen bin alle URL's im Text in anklickbare Links umzuwandeln und anschließend möchte ich jetzt gerne die href-Tags die auf ein Youtube Video verweisen mittels preg-replace in iframe-Tags umwandeln.

Mein Versuch:
PHP-Code:
$text '<a href="http://www.youtube.com/watch?v=7TGmg7SKpOw" title="YouTube - kunstWERKe vom Künstler Helmut Johann Wendelken">YouTube - kunstWERKe vom Künstler Helmut Johann Wendelken</a> hier steht noch mehr text im string'//string der umgewandelt werden soll

return preg_replace('#<a\s*(?:href=[\'"]((http|ftp)\:\/\/)?([w]{3}\.)?(youtube\.)([a-z]{2,4})(\/watch\?v=)([a-zA-Z0-9_-]+)((.[^\S])*?)([^\'"]+)[\'"])?\s*(?:title=[\'"]([^\'"]+)[\'"])?.*?>((?:(?!</a>).)*)</a>#i''<iframe title="YouTube video player" width="300" height="255" src="http://www.youtube.com/embed/$7" frameborder="0" allowfullscreen></iframe>'$text); 
Meine Frage:
Wo bzw. an welche Stelle könnte ich einen Denkfehler gemacht in meinem Pattern haben?

Das Problem:
Zur Zeit wird nicht wie gewünscht die elfstellige Youtube Video ID gefunden und ersetzt.

Ich bin um jede Antwort sehr dankbar.
hjw-kunstwerk ist offline   Mit Zitat antworten
Alt 04.03.2011, 17:34  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von hjw-kunstwerk Beitrag anzeigen
Wo bzw. an welche Stelle könnte ich einen Denkfehler gemacht in meinem Pattern haben?
An der Stelle, wo du gar nicht das komplette A-Element durch einen Iframe ersetzt, sondern nur bestimmte Teile innerhalb.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Probleme bei einem einfachen Regex smilla PHP Einsteiger 5 14.12.2010 11:38
RegEx für E-Mails (preg_replace) N4bla PHP Tipps 2010 4 18.11.2010 21:53
[Erledigt] Kleine Regex Frage Bubelbub PHP-Fortgeschrittene 8 25.07.2010 23:39
Gdata Youtube (Requests) Programmierung dazzafact Gewerblich 0 22.04.2010 19:59
[Erledigt] regex | variables wort herausfiltern Knechtle PHP Tipps 2010 6 05.03.2010 17:21
Youtube Video beim Play drücken vergrößern reinhardcore Beitragsarchiv 5 29.10.2009 13:48
Array sortieren mit regex Lupi PHP Tipps 2008 3 21.07.2008 15:17
Regex: Auslesen der Meta-Tags einer Webseite Sucheingrenzung pepe24 PHP Tipps 2008 12 31.05.2008 15:41
2 Regex in PHP kompatible Syntax übersetzen NoiZy PHP-Fortgeschrittene 6 07.04.2008 09:04
Regex Link Problem Broadcast PHP Tipps 2008 2 29.02.2008 16:30
[gelöst :D ] regex tuts nur einmal pro zeile notyyy PHP Tipps 2008 17 24.09.2007 15:40
habe ein paar fragen zu REGEX imported_kremser PHP Tipps 2006 11 31.01.2006 15:30
RegEx findet Stringvorkommen nicht PHP Tipps 2007 6 08.12.2005 21:52
Regex für attribute in quelltexten robo47 PHP Tipps 2005 6 27.01.2005 18:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
youtube regex, youtube videoid mittels preg auslesen, youtube video id, regex youtube, regex youtube video id, youtube video id php, kanal seite, regex href youtube, youtube id auslesen php, youtube video id pattern regex, regex youtube url, youtube url regex, youtube video id ermitteln php, youtube kanal seite, youtube url regexp, youtube regexp kanal, ersetzen von urls in texten durch anklickbare verweise, preg_match youtube id von kanal, php youtube regex, youtube 11 stelliger code ersetzen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:03 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum