Saya memiliki bidang teks tempat pengguna dapat menulis apa saja.
Sebagai contoh:
Lorem Ipsum hanyalah teks tiruan. http://www.youtube.com/watch?v=DUQi_R4SgWo dari industri pencetakan dan penyusunan huruf. Lorem Ipsum telah menjadi teks tiruan standar industri sejak tahun 1500-an, ketika printer yang tidak dikenal menggunakan galai jenis dan mengacaknya untuk membuat buku jenis spesimen. Ini telah bertahan tidak hanya lima abad, tetapi juga lompatan ke dalam penyusunan huruf elektronik, tetap pada dasarnya tidak berubah. http://www.youtube.com/watch ?
Sekarang saya ingin mengurai dan menemukan semua URL video YouTube dan idnya.
Tahu bagaimana cara kerjanya?
Jawaban:
URL video YouTube dapat ditemukan dalam berbagai format:
http://youtu.be/NLqAF9hrVbY
http://www.youtube.com/embed/NLqAF9hrVbY
https://www.youtube.com/embed/NLqAF9hrVbY
http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US
http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US
http://www.youtube.com/watch?v=NLqAF9hrVbY
http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo
http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I
http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/2/PPS-8DMrAn4
http://gdata.youtube.com/feeds/api/videos/NLqAF9hrVbY
http://www.youtube.com/watch?v=spDj54kf-vY&feature=g-vrec
http://www.youtube.com/watch?v=spDj54kf-vY&feature=youtu.be
http://www.youtube-nocookie.com
Berikut adalah fungsi PHP dengan ekspresi reguler yang dikomentari yang cocok dengan masing-masing formulir URL ini dan mengubahnya menjadi tautan (jika belum ada tautan):
// Linkify youtube URLs which are not already links. function linkifyYouTubeURLs($text) { $text = preg_replace('~(?#!js YouTubeId Rev:20160125_1800) # Match non-linked youtube URL in the wild. (Rev:20130823) https?:// # Required scheme. Either http or https. (?:[0-9A-Z-]+\.)? # Optional subdomain. (?: # Group host alternatives. youtu\.be/ # Either youtu.be, | youtube # or youtube.com or (?:-nocookie)? # youtube-nocookie.com \.com # followed by \S*? # Allow anything up to VIDEO_ID, [^\w\s-] # but char before ID is non-ID char. ) # End host alternatives. ([\w-]{11}) # $1: VIDEO_ID is exactly 11 chars. (?=[^\w-]|$) # Assert next char is non-ID or EOS. (?! # Assert URL is not pre-linked. [?=&+%\w.-]* # Allow URL (query) remainder. (?: # Group pre-linked alternatives. [\'"][^<>]*> # Either inside a start tag, | </a> # or inside <a> element text contents. ) # End recognized pre-linked alts. ) # End negative lookahead assertion. [?=&+%\w.-]* # Consume any URL (query) remainder. ~ix', '<a href="http://www.youtube.com/watch?v=$1">YouTube link: $1</a>', $text); return $text; }
; // Akhiri $ YouTubeId.
Dan berikut adalah versi JavaScript dengan regex yang sama persis (dengan komentar dihapus):
// Linkify youtube URLs which are not already links. function linkifyYouTubeURLs(text) { var re = /https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube(?:-nocookie)?\.com\S*?[^\w\s-])([\w-]{11})(?=[^\w-]|$)(?![?=&+%\w.-]*(?:['"][^<>]*>|<\/a>))[?=&+%\w.-]*/ig; return text.replace(re, '<a href="http://www.youtube.com/watch?v=$1">YouTube link: $1</a>'); }
Catatan:
$1
."http://www.youtube.com/watch?v=VIDEO_ID"
URL gaya dan menetapkan teks link:"YouTube link: VIDEO_ID"
.Edit 2011-07-05: Menambahkan
-
tanda hubung ke kelas ID charEdit 2011-07-17: Memperbaiki regex untuk menggunakan bagian yang tersisa (mis. Kueri ) dari URL setelah ID YouTube. Menambahkan pengubah
'i'
kasus pengabaian . Berganti nama menjadi fungsi camelCase. Peningkatan tes lookahead pra-link.Edit 2011-07-27: Menambahkan format "pengguna" dan "ytscreeningroom" baru dari URL YouTube.
Sunting 2011-08-02: Disederhanakan / digeneralisasikan untuk menangani URL YouTube "any / thing / goes" baru.
Sunting 2011-08-25: Beberapa modifikasi:
linkifyYouTubeURLs()
function.\b
kata jangkar batas di sekitar VIDEO_ID. Namun, ini tidak akan berfungsi jika VIDEO_ID diawali atau diakhiri dengan-
tanda hubung. Diperbaiki sehingga menangani kondisi ini.+
dan%
ke string kueri pencocokan kelas karakter.%
ke:~
.Sunting 2011-10-12: Bagian host URL YouTube sekarang dapat memiliki subdomain apa pun (tidak hanya
www.
).Sunting 2012-05-01: Bagian URL konsumsi sekarang memungkinkan untuk '-'.
Edit 2013-08-23: Menambahkan format tambahan yang disediakan oleh @Mei. (Bagian kueri mungkin memiliki
.
titik.Mengedit 2013/11/30: Ditambahkan Format tambahan yang disediakan oleh @CRONUS:
youtube-nocookie.com
.Edit 2016-01-25: Memperbaiki regex untuk menangani kasus kesalahan yang disediakan oleh CRONUS.
sumber
Inilah metode yang pernah saya tulis untuk proyek yang mengekstrak kunci video YouTube dan Vimeo:
/** * strip important information out of any video link * * @param string link to a video on the hosters page * @return mixed FALSE on failure, array on success */ function getHostInfo ($vid_link) { // YouTube get video id if (strpos($vid_link, 'youtu')) { // Regular links if (preg_match('/(?<=v\=)([\w\d-_]+)/', $vid_link, $matches)) return array('host_name' => 'youtube', 'original_key' => $matches[0]); // Ajax hash tag links else if (preg_match('§([\d\w-_]+)$§i', $vid_link, $matches)) return array('host_name' => 'youtube', 'original_key' => $matches[0]); else return FALSE; } // Vimeo get video id elseif (strpos($vid_link, 'vimeo')) { if (preg_match('§(?<=/)([\d]+)§', $vid_link, $matches)) return array('host_name' => 'vimeo', 'original_key' => $matches[0]); else return FALSE; } else return FALSE; }
sumber
if(strpos($vid_link, 'youtu'))
akan menangkap url pendekyoutu.be
selain url umum.Sementara jawaban ridgerunner adalah dasar untuk jawaban saya, jawaban ini TIDAK menyelesaikan semua url dan saya tidak percaya itu mampu melakukannya, karena beberapa kemungkinan kecocokan
VIDEO_ID
dalam URL YouTube. Regex saya menyertakan pendekatan agresifnya sebagai upaya terakhir, tetapi mencoba semua pencocokan umum terlebih dahulu, sangat mengurangi kemungkinan kecocokan yang salah nanti di URL.Regex ini:
/https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/ytscreeningroom\?v=|\/feeds\/api\/videos\/|\/user\S*[^\w\-\s]|\S*[^\w\-\s]))([\w\-]{11})[?=&+%\w-]*/ig;
Menangani semua kasus yang awalnya direferensikan dalam contoh ridgerunners, ditambah url apa pun yang mungkin kebetulan memiliki urutan 11 karakter kemudian di url. yaitu:
http://www.youtube.com/watch?v=GUEZCxBcM78&feature=pyv&feature=pyv&ad=10059374899&kw=%2Bwingsuit
Berikut adalah contoh yang berfungsi yang menguji semua contoh url YouTube:
http://jsfiddle.net/DJSwc/5/
sumber
Mencoba
Anda akan menemukan ID video di grup pengambilan pertama. Yang tidak saya ketahui adalah apa itu ID Video yang valid? Saat ini saya memeriksa
v=
dan menangkap semua-A-Za-z0-9_
.Saya memeriksanya secara online di sini di rubular dengan string sampel Anda.
sumber
Menggunakan:
<?php // The YouTube URL string $youtube_url='http://www.youtube.com/watch?v=8VtUYvwktFQ'; // Use regex to get the video ID $regex='#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+#'; preg_match($regex, $youtube_url, $id); // Plug that into our HTML ?>
sumber
Oke, saya membuat fungsi sendiri. Tapi saya yakin ini sangat tidak efisien. Setiap peningkatan diterima:
function get_youtube_videos($string) { $ids = array(); // Find all URLs preg_match_all('/(http|https)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/', $string, $links); foreach ($links[0] as $link) { if (preg_match('~youtube\.com~', $link)) { if (preg_match('/[^=]+=([^?]+)/', $link, $id)) { $ids[] = $id[1]; } } } return $ids; }
sumber
Saya mencoba ekspresi sederhana untuk hanya mendapatkan videoid:
[?&]v=([^&#]*)
Periksa apakah berfungsi secara online di sini di phpliveregex .
sumber
Pengepos asli bertanya "Saya ingin mengurai dan menemukan semua URL video YouTube dan id-nya." Saya mengganti jawaban paling populer di atas ke preg_match dan mengembalikan id video dan URL.
Dapatkan URL dan ID YouTube dari postingan:
$match[0] = Full URL $match[1] = video ID function get_youtube_id($input) { $input = preg_match('~https?://(?:[0-9A-Z-]+\.)?(?:youtu\.be/|youtube(?:-nocookie)?\.com\S*[^\w\s-])([\w-]{11})(?=[^\w-]|$)(?![?=&+%\w.-]*(?:[\'"][^<>]*>|</a>))[?=&+%\w.-]*~ix', $input, $match); return $match; }
sumber
Temukan tautan YouTube dengan mudah dari string:
function my_url_search($se_action_data) { $regex = '/https?\:\/\/[^\" ]+/i'; preg_match_all($regex, $se_action_data, $matches); $get_url=array_reverse($matches[0]); return array_unique($get_url); } echo my_url_search($se_action_data)
sumber
String urlid="" ; String url="http://www.youtube.com/watch?v=0zM4nApSvMg#t=0m10s"; Pattern pattern =Pattern.compile("(?:http|https|)(?::\\/\\/|)(?:www.|)(?:youtu\\.be\\/|youtube\\.com(?:\\/embed\\/|\\/v\\/|\\/watch\\?v=|\\/ytscreeningroom\\?v=|\\/feeds\\/api\\/videos\\/|\\/user\\\\S*[^\\w\\-\\s]|\\S*[^\\w\\-\\s]))([\\w\\-\\_]{11})[a-z0-9;:@#?&%=+\\/\\$_.-]*"); Matcher result = pattern.matcher(url); if (result.find()) { urlid=result.group(1); }
Kode di java ini berfungsi dengan baik untuk semua url youtube saat ini.
sumber