如何使用 preg_match php 函数获取 Dailymotion 代码? [复制]

Posted

技术标签:

【中文标题】如何使用 preg_match php 函数获取 Dailymotion 代码? [复制]【英文标题】:How to get Dailymotion code using preg_match php function? [duplicate] 【发布时间】:2012-10-21 23:45:40 【问题描述】:

可能重复:How do I get the Video Id from the URL? (DailyMotion)

我有这个代码来获取视频的dailymotion缩略图:

<?php
    $url = get_the_content(); 
    if (preg_match('????????????', $url, $match)) 
        $video_id_dailymotion = $match[1];
    
?>

<?php if($video_id_dailymotion): ?>
    <img class="video-thumbnail" src="http://dailymotion.com/thumbnail/video/<?php echo $video_id_dailymotion; ?>"  >
<?php endif; ?>

但是在 preg_match 函数部分需要帮助。我应该用什么代替 ???????????? 作为第一个参数?

dailymotion视频格式如:

http://www.dailymotion.com/video/xulmeo_osama-bin-laden-for-dummies_shortfilms

顺便说一句。 $url 变量包含其他内容,例如 youtube 对象代码、大量文本等,并且有时仅嵌入dailymotion 视频。

编辑: 对于 youtube,我使用的是这样的东西:

if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]11)%i', $url, $match)) 
    $video_id_youtube = $match[1];

它正在工作,现在我需要类似的东西来进行日常运动。

编辑 2: 必须使用 preg_match 并在该正则表达式条件下使用 dailymotion.com

编辑 3: $url 中需要 preg_match 处理的代码可以是这样的,例如:

And here is the video <iframe src="http://www.dailymotion.com/embed/video/xsqxky" frameborder="0"  ></iframe>
What do you think? Let us know. Peace!

【问题讨论】:

好吧,看起来你离我们并不遥远。而且我很确定您足够聪明,知道 youtube 正则表达式不起作用。更有趣的部分是了解您使用正则表达式遇到的具体问题。你在哪里遇到障碍?否则要求正则表达式就像要求代码一样,但我们喜欢增加一些价值并希望回答问题,而不仅仅是提供代码。 实际上 youtube 正则表达式对我的朋友有用。 我可能会在 2 天内开始为这个问题提供赏金,所以请,如果你只是想发表你的意见,我请你停下来,让其他可能想要帮助我回答我的人题。谢谢。 【参考方案1】:

对于dailymotion,视频ID 是第三个URL 段的第一个字符串(在第一个_ 之前)。根据你的例子

www.dailymotion.com/video/xulmeo_osama-bin-laden-for-dummies_shortfilms

视频 ID 为 xulmeo。所以你需要做的就是在第一次出现下划线之前提取字符串

代码:

$slice=explode('/',$url);
$video_id_dailymotion=explode('_',$slice[2]);

或者干脆

$video_id_dailymotion=strtok(basename($url), '_');

参考:explodestrtokbasename


编辑:正如所指出的,dailymotion 链接的显示方式可能不同。

    http://www.dailymotion.com/embed/video/xulmeo http://www.dailymotion.com/video/xulmeo_osama-bin-laden-for-dummies_shortfilms

对于案例 2,请参考之前的 sn-ps,对于这两种情况,请使用此代码

$slice=explode('/',$url);
$video_id_dailymotion=(strlen($slice[2])==6?$slice[2]:explode('_',$slice[2]));
// All dailymotion video id's are 6 in length

【讨论】:

不,正如我已经在我的问题中提到的那样,我在 $url 变量中有很多链接(不仅是dailymotion),因此在使用您的代码时可能会出错。必须使用 preg_match 并在该正则表达式中使用 dailymotion.com。 我已对我的问题进行了更多澄清,以使其更加清晰。如果有任何遗漏,请告诉我,我将在我的问题中添加其他信息。谢谢。 我提供的代码仅适用于dailymotion,并且仅适用于dailymotion。对于其他站点,您需要根据链接重新编写。因此,请确定您拥有的网站链接(dailymotion/youtube/等),然后将此代码用于 dailymotion @Derfder: 将代码放入它自己的函数并使用该函数而不是preg_match 有什么错误?我认为以编程方式运行它没有任何区别。无需对恕我直言投反对票。 Sai 也已经在这里完成了字符串分析的很大一部分,这对于基于正则表达式的解决方案同样有用。但是这里没有人需要为您编写正则表达式,您只是问它是如何完成的。 你不懂可以是dailymotion.com/embed/video/xsqxky或者dailymotion.com/video/…所以格式不一样。我需要找出代码中的所有 dailymotion.com 链接,无论是在 src="" 还是 href="" 中,然后使用 preg_match 中的一些正则表达式对其进行解析,以捕获最后一个斜杠之前的所有内容。【参考方案2】:

首先使用 html 解析器来提取所有链接。这将使您能够以首选的形式获得信息。

然后normalize all links根据底层规范,即RFC3986 Section 6。

现在所有 URL 的格式都可以用于比较和分析。例如使用正则表达式。

对于这三个步骤,存在工具和答案:

    DOMDocumentDOMXPath - 见 How to parse and process HTML with PHP? Net_Url2 - 见XPath Query & HTML - Find Specific HREF's Within Anchor Tags preg_match - 见How do I get the Video Id from the URL? (DailyMotion)

通常希望您在提出问题之前先做好功课,但我将这个概括性的程序留给您和未来的访客,他们“只是遇到问题”并且看不到树木的树木。

【讨论】:

@derfder 如何方便地转移了他最初提出的问题,这一点清晰可见。他最初问“如何获取 Dailymotion 代码..”,然后限制为 preg_match,然后从包含不同链接和文本的整个 wordpress 文章中提取 dailymotion id。 @derfder 这是您的解决方案。没有人可以为您编写整个代码。一切都是为了在出错时获得建议。 @SaiSasidhar:是的,我完全支持你。 我要求这个: preg_match('#youtube.com/embed/([A-Za-z0-9]+)#s', $url, $match) 或 preg_match('#dailymotion.com/embed/video/([A-Za-z0-9]+)#s', $url, $match) 。但是以更聪明和黑客的方式。如果您认为正则表达式是“您的全部”,我建议您“重新考虑”您的逻辑。谢谢。 两者都在链接的重复问题中得到处理。这也是我回答的一部分(以链接的形式)。但也许你可以投反对票和抱怨,仅此而已。对你很不友好。

以上是关于如何使用 preg_match php 函数获取 Dailymotion 代码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

js 如何正则匹配多个,像php 的preg_match()

如何在PHP中preg_match一个可以为NULL的变量?

正则表达式,PHP preg_match 使函数如何在字符串以 start_to_date 开头时返回 true [重复]

如何使用 php 从给定的视频 ID 获取 facebook 视频缩略图

PHP 正则表达式匹配 preg_match 与 preg_match_all 函数

PHP中使用正则表达式详解 preg_match() preg_replace() preg_mat