gpt4 book ai didi

regex - Scala - 来自 URL 的 Youtube 视频 ID

转载 作者:行者123 更新时间:2023-12-04 18:17:11 28 4
gpt4 key购买 nike

我从这里得到以下正则表达式:https://stackoverflow.com/a/10405818/924999

val regex = """/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;""".r

我正在尝试从 youtube 视频网址中提取视频 ID:
val url = "http://www.youtube.com/watch?v=XrivBjlv6Mw"

url match {

case regex(result) => result

case _ => null

}

但是它似乎总是返回 null,我是否缺少某些东西或需要做不同的事情?

在此先感谢您的帮助,非常感谢:)

最佳答案

您拥有的正则表达式是 php 风格的正则表达式,而不是 java 风格 - 例如,注意 /ig;最后的标志。

所以你只需要稍微编辑一下:

val youtubeRgx = """https?://(?:[0-9a-zA-Z-]+\.)?(?:youtu\.be/|youtube\.com\S*[^\w\-\s])([\w \-]{11})(?=[^\w\-]|$)(?![?=&+%\w]*(?:[\'"][^<>]*>|</a>))[?=&+%\w-]*""".r

我在所有可能的 youtube 网址上对其进行了测试,并且可以正常工作。例子:
scala> youtubeRgx.pattern.matcher("http://www.youtube.com/watch?v=XrivBjlv6Mw").matches
res23: Boolean = true

并提取值(value):
"http://www.youtube.com/watch?v=XrivBjlv6Mw" match {
case youtubeRgx(a) => Some(a)
case _ => None
}
res33: Option[String] = Some(XrivBjlv6Mw)

很遗憾,java 不允许在正则表达式中进行正确的注释,所以我做了我能做的:
val youtubeRgx = """https?://         # Required scheme. Either http or https.
|(?:[0-9a-zA-Z-]+\.)? # Optional subdomain.
|(?: # Group host alternatives.
| youtu\.be/ # Either youtu.be,
|| youtube\.com # or youtube.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.
|""".stripMargin.replaceAll("\\s*#.*\n", "").replace(" ","").r

(改编自@ridgerunner 在这里的回答: find all youtube video ids in string)

关于regex - Scala - 来自 URL 的 Youtube 视频 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11431078/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com