Voor een WordPress website moest ik een PHP script schrijven die uit een blok met content de video URL haalt van Youtube, Vimeo of Dailymotion. Deze URL zet ik om naar een stukje embed code en verplaats ik naar een custom meta veld.
Ik heb gekozen om dit met een regex te doen. Helaas kreeg ik dit niet voor elkaar met een simpele regex. De video URLs zijn nogal verschillend en voor of na de URL kan er ook nog content staan.
Onderstaande regexes heb ik op internet gevonden en een klein beetje aangepast. Je kan deze in de PHP functie preg_match_all() gebruiken. De regexes geven verschillende resultaten terug zoals de volledige URL of alleen de video ID. Dump daarom het resultaat van preg_match_all() zodat je kan dan zien welke array value je nodig hebt.
Youtube:
'/.*(((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu\.be|youtube-nocookie\.com))(\/(?:[\w\-]+\?v=|embed\/|v\/)?)([\w\-]+)(\S+)?).*/i'
Vimeo:
'/(http|https)?:\/\/(www\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|)(\d+)(?:|\/\?)/i'
Dailymotion:
'/(http|https)?:\/\/(www\.dailymotion\.com\/video\/(\w+))/i'