Php 通过URL(正则表达式)确定Vimeo源

Php 通过URL(正则表达式)确定Vimeo源,php,regex,vimeo,Php,Regex,Vimeo,好的,这里有一个有趣的 我需要弄清楚用户在输入副本并将Vimeo URL粘贴到输入框时引用的源。对于那些不熟悉的人,Vimeo目前有4个不同的源,可以通过其简单的API访问: 属于用户的视频 有效的URL结构:或 属于某个组的视频 有效的URL结构:或 属于频道的视频 有效的URL结构:或 属于相册的视频 有效的URL结构:或 因此,基本上,我希望能够将URL运行到一个函数中,该函数将告诉我URL属于哪个源 我一直在使用它制作属于某个用户的视频,但现在我需要扩展到所有来源 sscanf(pars

好的,这里有一个有趣的

我需要弄清楚用户在输入副本并将Vimeo URL粘贴到输入框时引用的源。对于那些不熟悉的人,Vimeo目前有4个不同的源,可以通过其简单的API访问:

属于用户的视频 有效的URL结构:

属于某个组的视频 有效的URL结构:

属于频道的视频 有效的URL结构:

属于相册的视频 有效的URL结构:

因此,基本上,我希望能够将URL运行到一个函数中,该函数将告诉我URL属于哪个源

我一直在使用它制作属于某个用户的视频,但现在我需要扩展到所有来源

sscanf(parse_url($url,PHP_url_路径),'/%d',$video_id)

也许我应该这样做四次<代码>预匹配(“???”,$url)

谢谢你的帮助

我会预匹配()以下正则表达式模式(按此顺序):

这将使正则表达式匹配:

vimeo.com/channels/...grab_this_data...
vimeo.com/groups/...grab_this_data...
vimeo.com/albums/...grab_this_data...
如果所有这些preg_匹配失败(因此是用户URL),它将获取URL中的任何内容:

vimeo.com/...grab_this_data...
祝你好运。

我会预先匹配()以下正则表达式模式(按此顺序):

这将使正则表达式匹配:

vimeo.com/channels/...grab_this_data...
vimeo.com/groups/...grab_this_data...
vimeo.com/albums/...grab_this_data...
如果所有这些preg_匹配失败(因此是用户URL),它将获取URL中的任何内容:

vimeo.com/...grab_this_data...

祝你好运。

你不需要正则表达式:

function discoverVimeo($url)
{
    if ((($url = parse_url($url)) !== false) && (preg_match('~vimeo[.]com$~', $url['host']) > 0))
    {
        $url = array_filter(explode('/', $url['path']), 'strlen');

        if (in_array($url[0], array('album', 'channels', 'groups')) !== true)
        {
            array_unshift($url, 'users');
        }

        return array('type' => rtrim(array_shift($url), 's'), 'id' => array_shift($url));
    }

    return false;
}
以下内容将返回一个数组,其中包含一个索引
id
和另一个索引
type
,该数组将是:

  • 用户
  • 相册
  • 频道

    • 您不需要正则表达式:

      function discoverVimeo($url)
      {
          if ((($url = parse_url($url)) !== false) && (preg_match('~vimeo[.]com$~', $url['host']) > 0))
          {
              $url = array_filter(explode('/', $url['path']), 'strlen');
      
              if (in_array($url[0], array('album', 'channels', 'groups')) !== true)
              {
                  array_unshift($url, 'users');
              }
      
              return array('type' => rtrim(array_shift($url), 's'), 'id' => array_shift($url));
          }
      
          return false;
      }
      
      以下内容将返回一个数组,其中包含一个索引
      id
      和另一个索引
      type
      ,该数组将是:

      • 用户
      • 相册
      • 频道

      显示您当前使用的正则表达式我的方法是让用户告诉我他们在另一个下拉框(组、相册、频道或用户名)中使用了什么,但我想简化它。我对正则表达式的使用很差,但我得到了
      /^(http | https):\/\/(www\)?vimeo\.com\/(clip\:)?(\d+).*$/
      以前处理单个片段。显示您当前使用的正则表达式我的方法是让用户告诉我他们在另一个下拉框(组、专辑、频道或用户名)中使用了什么,但我想简化它。我对正则表达式的使用很差,但我以前使用单个片段时得到了
      /^(http | https):\/\/(www\)?vimeo\.com\/(clip\:)?(\d+).*$/
      。我需要一点时间来测试这一点,但我会回来报告。谢谢你的时间!2件事:我注意到要检查的$url的索引应该是
      $url[1]
      ,而不是
      $url[0]
      。此外,如果用户省略了
      http://
      https://
      ,则会失败。还有什么办法可以解释这一点吗?@DaveKiss:你确定这个指数吗?您是否尝试过我使用的最新版本的
      array\u filter
      ?因为它应该是0。。。关于协议,您可以执行以下操作:
      $url=sprintf('http://%s',preg_replace('^https?://~i',''$url))
      就在
      parse_url
      调用之前。@DaveKiss:关于协议,你也可以使用。我需要一点时间来测试,但我会回来报告。谢谢你的时间!2件事:我注意到要检查的$url的索引应该是
      $url[1]
      ,而不是
      $url[0]
      。此外,如果用户省略了
      http://
      https://
      ,则会失败。还有什么办法可以解释这一点吗?@DaveKiss:你确定这个指数吗?您是否尝试过我使用的最新版本的
      array\u filter
      ?因为它应该是0。。。关于协议,您可以执行以下操作:
      $url=sprintf('http://%s',preg_replace('^https?://~i',''$url))
      就在
      parse_url
      调用之前。@DaveKiss:关于协议,您也可以使用。