从频道 url - android 中提取 youtube 频道 ID
Extract youtube channel id from channel url - android
示例 URL:https://www.youtube.com/channel/UCAoMPWcQKA_9Af5YhWdrZgw
我只需要 UCAoMPWcQKA_9Af5YhWdrZgw(频道 ID)
将字符串解析为 URI:
Uri uri = Uri.parse("https://www.youtube.com/channel/UCAoMPWcQKA_9Af5YhWdrZgw")
String id = uri.lastPathSegment() //UCAoMPWcQKA_9Af5YhWdrZgw
这是您可以用来捕获频道 ID 的模式,这也会验证 url
^(?:(http|https):\/\/[a-zA-Z-]*\.{0,1}[a-zA-Z-]{3,}\.[a-z]{2,})\/channel\/([a-zA-Z0-9_]{3,})$
我不知道如何在 android 中执行正则表达式,但共享正则表达式 url,您可以从这里查看 https://regex101.com/r/9sjMPp/1
或 javascript 代码执行
var str = "https://www.youtube.com/channel/UCAoMPWcQKA_9Af5YhWdrZgw";
var pattern = /^(?:(http|https):\/\/[a-zA-Z-]*\.{0,1}[a-zA-Z-]{3,}\.[a-z]{2,})\/channel\/([a-zA-Z0-9_]{3,})$/;
var matchs = str.match(pattern);
console.log(matchs[2]);
// output is UCAoMPWcQKA_9Af5YhWdrZgw
希望你明白了。
您可以使用此正则表达式从不同类型的 YouTube 检索视频 ID url。
String pattern = "(?<=watch\?v=|/videos/|embed\/|youtu.be\/|\/v\/|\/e\/|watch\?v%3D|watch\?feature=player_embedded&v=|%2Fvideos%2F|embed%\u200C\u200B2F|youtu.be%2F|%2Fv%2F)[^#\&\?\n]*";
然后使用上面的正则表达式生成一个 Pattern 实例,您可以从中使用 Pattern.matcher(videoLink)
.
得到一个 Matcher 实例
现在 Matcher.find()
会给你一个布尔值,判断上面的正则表达式是否出现在给定的视频 link 中。
取决于您可以使用 Matcher.group()
,它将返回视频 ID。
Refer Here
Subhendu Mondal 决策在这样的链接上崩溃。
// args after id
https://www.youtube.com/channel/UCAoMPWcQKA_9Af5YhWdrZgw?view_as=subscriber
//minus sign in id
https://www.youtube.com/channel/UCQ18THOcZ8nIP-A3ZCqqZwA
所以这是改进的决定,协议组也从匹配结果中删除
^(?:http|https):\/\/[a-zA-Z-]*\.{0,1}[a-zA-Z-]{3,}\.[a-z]{2,}\/channel\/([a-zA-Z0-9_\-]{3,24})
var str = "https://www.youtube.com/channel/UCAoMPWcQKA_9Af5YhWdrZgw";
var pattern = /^(?:(http|https):\/\/[a-zA-Z-]*\.{0,1}[a-zA-Z-]{3,}\.[a-z]{2,})\/channel\/([a-zA-Z0-9_]{3,})$/;
var match = str.match(pattern);
console.log(match[1]);
更新:
这是最短路线:
youtube.com\/channel\/([^#\&\?]*).*
示例 URL:https://www.youtube.com/channel/UCAoMPWcQKA_9Af5YhWdrZgw
我只需要 UCAoMPWcQKA_9Af5YhWdrZgw(频道 ID)
将字符串解析为 URI:
Uri uri = Uri.parse("https://www.youtube.com/channel/UCAoMPWcQKA_9Af5YhWdrZgw")
String id = uri.lastPathSegment() //UCAoMPWcQKA_9Af5YhWdrZgw
这是您可以用来捕获频道 ID 的模式,这也会验证 url
^(?:(http|https):\/\/[a-zA-Z-]*\.{0,1}[a-zA-Z-]{3,}\.[a-z]{2,})\/channel\/([a-zA-Z0-9_]{3,})$
我不知道如何在 android 中执行正则表达式,但共享正则表达式 url,您可以从这里查看 https://regex101.com/r/9sjMPp/1
或 javascript 代码执行
var str = "https://www.youtube.com/channel/UCAoMPWcQKA_9Af5YhWdrZgw";
var pattern = /^(?:(http|https):\/\/[a-zA-Z-]*\.{0,1}[a-zA-Z-]{3,}\.[a-z]{2,})\/channel\/([a-zA-Z0-9_]{3,})$/;
var matchs = str.match(pattern);
console.log(matchs[2]);
// output is UCAoMPWcQKA_9Af5YhWdrZgw
希望你明白了。
您可以使用此正则表达式从不同类型的 YouTube 检索视频 ID url。
String pattern = "(?<=watch\?v=|/videos/|embed\/|youtu.be\/|\/v\/|\/e\/|watch\?v%3D|watch\?feature=player_embedded&v=|%2Fvideos%2F|embed%\u200C\u200B2F|youtu.be%2F|%2Fv%2F)[^#\&\?\n]*";
然后使用上面的正则表达式生成一个 Pattern 实例,您可以从中使用 Pattern.matcher(videoLink)
.
得到一个 Matcher 实例
现在 Matcher.find()
会给你一个布尔值,判断上面的正则表达式是否出现在给定的视频 link 中。
取决于您可以使用 Matcher.group()
,它将返回视频 ID。
Refer Here
Subhendu Mondal 决策在这样的链接上崩溃。
// args after id
https://www.youtube.com/channel/UCAoMPWcQKA_9Af5YhWdrZgw?view_as=subscriber
//minus sign in id
https://www.youtube.com/channel/UCQ18THOcZ8nIP-A3ZCqqZwA
所以这是改进的决定,协议组也从匹配结果中删除
^(?:http|https):\/\/[a-zA-Z-]*\.{0,1}[a-zA-Z-]{3,}\.[a-z]{2,}\/channel\/([a-zA-Z0-9_\-]{3,24})
var str = "https://www.youtube.com/channel/UCAoMPWcQKA_9Af5YhWdrZgw";
var pattern = /^(?:(http|https):\/\/[a-zA-Z-]*\.{0,1}[a-zA-Z-]{3,}\.[a-z]{2,})\/channel\/([a-zA-Z0-9_]{3,})$/;
var match = str.match(pattern);
console.log(match[1]);
更新:
这是最短路线:
youtube.com\/channel\/([^#\&\?]*).*