我正在尝试查找一个表达式,以仅保留我在$ 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/