gpt4 book ai didi

PHP Regex - 视频文件直接链接和 YouTube 链接

转载 作者:行者123 更新时间:2023-12-03 05:28:35 24 4
gpt4 key购买 nike

我正在尝试创建一个正则表达式,它应该匹配直接指向 *.mp4 文件 的 URL或 一个 YouTube 视频,使用 PHP。

我已经成功创建了一个仅匹配 YouTube 视频的正则表达式和另一个仅匹配直接 *.mp4 文件的正则表达式,现在我想将它们组合起来,但目前正在失败。

匹配的要求是它必须匹配带有和不带有 http(s) 和/或 www 的 URL。因此,例如以下链接应该是有效的:

https://www.example.com/files/video.mp4
http://www.example.com/files/video.mp4
https://example.com/files/video.mp4
http://example.com/files/video.mp4
www.example.com/files/video.mp4
www.youtube.com/watch?v=xxxxxx
www.youtu.be/watch?v=xxxxxx

我正在使用 regex101.com 进行测试和解释。目前根据这个测试网站,有些链接是有效的,有些链接是不正确的,但实际上应该是正确的。

有谁可以告诉我 my regex 有什么问题吗? ?
(http(s)?:\/\/|(w){3}).*\.((?:mp4)|).*(youtu(be|.be))?(\.com)?\/.+

最佳答案

正如 blhsing 指出的那样,它是防止模式(错误地)匹配所有网址的最后一个正斜杠。问题是,一旦您将最后一个斜杠设为可选,该模式将匹配任何 url,因为您的所有检查都只是那些 .* 之后的可选部分。通配符,已经匹配到字符串的末尾。 (example showing these false positives)

我想你也许可以使用 a pattern like this one 的前瞻功能。 :

(?<protocol>https?:\/\/(www\.)?|www\.)(?=.*mp4$|(?:youtu\.?be))(?<url>.*)

协议(protocol)部分结束后,我们用 (?=.*mp4$|(?:youtu\.?be)“向前看”查看 1) 字符串末尾的 mp4 或 2) 域部分看起来像“youtube|youtu.be”。在条件(前瞻)之后,我们只匹配模式的其余部分。

关于PHP Regex - 视频文件直接链接和 YouTube 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51004179/

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