来自嵌入代码的YouTube Vimeo视频ID或来自带有PHP正则表达式RegEx的URL

Adi*_*att 8 php regex youtube vimeo

我希望通过其嵌入代码或URL获取YouTube或Vimeo的视频ID,使用PHP执行此操作的任何解决方案?

Jas*_*ank 20

您可以使用preg_match来获取ID.我将在本回答中稍后介绍表达式,但这里是如何使用preg_match的基本思路:

preg_match('expression(video_id)', "http://www.your.url.here", $matches);
$video_id = $matches[1];
Run Code Online (Sandbox Code Playgroud)

以下是您询问的每种可能输入的表达式细分.我为每个链接添加了一个链接,显示了一些测试用例和结果.

  1. 对于YouTube网址,例如http://www.youtube.com/watch?v=89OpN_277yY,你可以使用这个表达式:

    v=(.{11})
    
    Run Code Online (Sandbox Code Playgroud)
  2. YouTube嵌入代码可能看起来像这样(一些无关紧要的内容被剪裁):

    <object width="640" height="390">
        <param name="movie" value="http://www.youtube.com/v/89OpN_277yY?fs=...
        ...
    </object>
    
    Run Code Online (Sandbox Code Playgroud)

    或者像这样:

    <iframe ... src="http://www.youtube.com/embed/89OpN_277yY" ... </iframe>
    
    Run Code Online (Sandbox Code Playgroud)

    因此,一个表达式来获取ID无论从风格,将是这个:

    \/v\/(.{11})|\/embed\/(.{11})
    
    Run Code Online (Sandbox Code Playgroud)
  3. http://vimeo.com/<integer>据我所知,Vimeo网址看起来像.我找到的最低价是简单的http://vimeo.com/2,我不知道是否有上限,但我现在假设它限制在10位数.如果他们知道细节,希望有人可以纠正我.可以使用表达式:

    vimeo\.com\/([0-9]{1,10})
    
    Run Code Online (Sandbox Code Playgroud)
  4. Vimeo嵌入代码采用以下形式:

    <iframe src="http://player.vimeo.com/video/<integer>" width="400" ...
    
    Run Code Online (Sandbox Code Playgroud)

    所以你可以使用这个表达式:

    player\.vimeo\.com\/video\/([0-9]{1,10})
    
    Run Code Online (Sandbox Code Playgroud)

    或者,如果数字的长度最终可能超过10,您可以使用:

    player\.vimeo\.com\/video/([0-9]*)"
    
    Run Code Online (Sandbox Code Playgroud)

    请记住,如果您将表达式用双引号括起来,"则需要使用a进行转义\.


总而言之,我不确定您是如何实现这一点的,但您可以将所有表达式组合在一起|,或者您可以单独匹配每个表达式.如果您希望我提供有关如何组合表达式的更多详细信息,请在此答案中添加注释.

  • 当我将这些正则表达式与preg_match一起使用时,我似乎没有得到任何匹配.我应该以某种方式修改它们还是正则表达式的风格不同? (2认同)