【问题标题】:PHP: RegEx match all URLs that are outside linksPHP:正则表达式匹配所有外部链接的 URL
【发布时间】:2013-04-23 13:39:20
【问题描述】:

到目前为止,我一直在使用这个正则表达式代码来获取 YouTube 视频的 ID

"/https?:\/\/w*.?(?:youtube.com|youtu.be)\/watch\/\?v=([A-Za-z0-9\-_]+)/i"

我尝试扩展它,因此它会忽略 HTML 链接中 YouTube 视频的 ID (href="..")

"/[?:(^href=\")]https?:\/\/w*.?(?:youtube.com|youtu.be)\/watch\/\?v=([A-Za-z0-9\-_]+)/i"

不幸的是,它没有这样做。事实上,完整的代码会产生相反的结果。

$input = array(
    'http://youtube.com/watch/?v=oKay1',
    'http://youtu.be/watch/?v=oKay2',
    'href="http://youtube.com/watch/?v=NICHToKay"', //this shouldn't be found
    '[url="http://youtube.com/watch/?v=oKay3]'
    );

$pattern = "/[?:(^href=\")]https?:\/\/w*.?(?:youtube.com|youtu.be)\/watch\/\?v=([A-Za-z0-9\-_]+)/i";

foreach($input as $v) {
    $match = preg_match_all($pattern, $v, $result);
    print "$v => $match\n";
    if ($match == 1)
        var_dump($result);
}

请帮忙?

【问题讨论】:

  • 为什么不先strip_tags(),然后再查找网址?

标签: php regex


【解决方案1】:

试试这个(基于数组中的 4 个给定值):

/^(\[url\="){0,1}http[s]{0,1}\:\/\/(www\.){0,1}(youtube\.com|youtu\.be)\/watch\/\?v\=(.+)(\]){0,1}/ims

您将在第三组结果中获得您的 ID

【讨论】:

    【解决方案2】:

    试试这个,我是从这个网站上的另一个链接得到的

    preg_match('#<object[^>]+>.+?http://www.youtube.com/v/([A-Za-z0-9\-_]+).+?</object>#s', $markup, $matches);
    
    var_dump($matches[1]);
    

    来源:Get Youtube Video ID from html code with PHP

    【讨论】:

      猜你喜欢
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多