c#Regex过滤youtube视频的ID



我知道也有类似的问题,但我实际上还没有看到一个问题涉及到所有可能的youtube url。Regex,我已经涵盖了几乎所有的事情,除了2个可能发生的事情。

(?<=(https?://)?(m.)?(www.)?(youtube.com|youtube.de|youtu.?be|youtube-nocookie.com)/(.*?)(/|embed|vi?=|?vi?=|watch?|watch?vi?=?|watch?v%|a=|u/1))([A-Za-z0-9_-]{11})

我过滤URL的开头,直到.com之后。然后,在11个字符的ID之前,链接中的内容都无关紧要。由于除了ID之外,[A-Za-z0-9_-]{11}还有其他可能的匹配项,因此我为ID包含了所有可能的前缀(/|embed|vi..(。现在Regex不起作用的两种可能性是

https://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/QdK8U-VIH_ o";

http://youtu.be/-wtIMTCHWuI

第一个是因为在/(Ingrid…(后面有一个11个字符的字符串第二个是因为每个其他URL在ID之前都有一个以上的URL。我不知道如何解决这个问题。对于用户URL,我尝试过(?!.(user/(.?(/((排除用户/anything/之后的所有内容,但这只是删除了整行的匹配项,即使ID和用户名都匹配。我知道这个链接实际上没有ID,因为它链接到一个配置文件,问题是它向我展示了除了ID之外还有另一个字符串的可能性,我的regex过滤

对于第二个问题,我不知道如何解决,因为在我看来,其他URL都需要2/。

这是我正在与合作的列表

https://gist.github.com/rodrigoborgesdeoliveira/987683cfbfcc8d800192da1e73adc486

带有用于测试的附加iframe

<iframe width="560" height="315" src="https://www.youtube.com/embed/BKapPQxcR3Q" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

非常感谢

请尝试以下regex。捕获的组1将具有视频id。

(?:(?:(?<=[vi])(?:=|%3D)|/))([A-Za-z0-9_-]{11})[&?s#%"]

演示

最新更新