php - PHP正则表达式查找第一个youtube链接

标签 php regex hyperlink youtube

我正在尝试查找一个表达式,以仅保留我在$ render变量中找到的第一个youtube链接。

$render="some text here https://www.youtube.com/watch?v=fJ9rUzIMcZQ https://www.youtube.com/watch?v=fJ9rUzIMcZQ some text here https://www.youtube.com/watch?v=fJ9rUzIMcZQhttps://www.youtube.com/watch?v=fJ9rUzIMcZQ";

$prefix = "https://www.youtube.com/watch?v=";
$index = strpos($render, $prefix) + strlen($prefix);
$youtube = substr($render, $index);
$youtube = strtok($youtube,' ');
$regex="@(https):\/\/(www\.)?youtube.com/watch\?v=[\w_-].* *@";
preg_match($string, $render, $matches, PREG_OFFSET_CAPTURE);
$render = preg_replace($regex, "", $render);
$render = substr_replace($render, $matches[0][0], $matches[0][1], 0);
echo $render;

我得到什么

https://www.youtube.com/watch?v=fJ9rUzIMcZQ  ://www.youtube.com/watch?v=fJ9rUzIMcZQ


我想得到什么

https://www.youtube.com/watch?v=fJ9rUzIMcZQ


附言
最后两个链接合并

最佳答案

尝试限制正则表达式可以匹配的数量,这样它就不会溢出到下一个URL中:

(?:https:\/\/www\.)?youtube\.com\/watch\?v=[\w_-]{1,11}

regex101 demo
$render = "some text here youtube.com/watch?v=fJ9rUzIMcZQ youtube.com/watch?v=fJ9rUzIMcZQ some text here youtube.com/watch?v=fJ9rUzIMcZQhttps://www.youtube.com/...";
preg_match('/(?:https:\/\/www\.)?youtube\.com\/watch\?v=[\w_-]{1,11}/', $render, $matches);
$render = $matches[0];
echo $render; // => youtube.com/watch?v=fJ9rUzIMcZQ

3v41.org demo

关于php - PHP正则表达式查找第一个youtube链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53439183/

相关文章:

php - 转换 blob 图像并上传到 storage/s3 文件夹

javascript - 使用 Ajax 访问 PHP 页面

xml - 添加超链接到 indesign

php - 选择所有客户以及每个客户的总订单

php - 基于php变量号最后一位的if语句

php - 如何在 php xpath 查询($xpath->query)中使用正则表达式?

c++ - QRegularExpression通配符匹配

regex - 使用数组时的 Perl 模式匹配

javascript - 默认情况下,链接在我的网络应用程序中在新选项卡/窗口中打开

c# - 如何让一个简单的超链接在 XAML 中工作?