Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中查找字符串并将其选择到底(未知)_Php_String_Substr_Strpos - Fatal编程技术网

如何在php中查找字符串并将其选择到底(未知)

如何在php中查找字符串并将其选择到底(未知),php,string,substr,strpos,Php,String,Substr,Strpos,我需要用php查找并选择文本中的所有youtube链接,以便用适当的嵌入代码替换它们,但我似乎找不到方法 1-链接的起始位置: 链接的开始可能在https://www.youtube.com/watch?v=和https://youtu.be/我认为strpos()可以完成这项工作,问题是 2-结束位置: 链接可能有(或没有)一个查询字符串,这使得它的长度未知,所以唯一的方法是在https://www.youtube.co....或https://youtu.b...和下一个空白,即链接的结尾

我需要用php查找并选择文本中的所有youtube链接,以便用适当的嵌入代码替换它们,但我似乎找不到方法

1-链接的起始位置:
链接的开始可能在
https://www.youtube.com/watch?v=
https://youtu.be/
我认为
strpos()
可以完成这项工作,问题是

2-结束位置:
链接可能有(或没有)一个查询字符串,这使得它的长度未知,所以唯一的方法是在
https://www.youtube.co....
https://youtu.b...
和下一个空白,即链接的结尾

我需要用正确的youtube嵌入代码替换链接

知道如何选择链接吗?

试试这个正则表达式

(https:\/\/www\.youtube\.com\/.*?)(?:\s|$)|(https:\/\/youtu\.be\/.*?)(?:\s|$)

用法:

$re = '/(https:\/\/www\.youtube\.com\/.*?)(?:\s|$)|(https:\/\/youtu\.be\/.*?)(?:\s|$)/';
$str = 'abc https://www.youtube.com/watch?v=Dx5qFachd3A def https://youtu.be/Dx5qFachd3A ghi';
$embedStart = '<iframe width="560" height="315" src="';
$embedEnd = '" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

$str = preg_replace($re,$embedStart.'$0'.$embedEnd,$str);

echo $str;
$re='/(https:\/\/www.youtube\.com\/.?(:\s\$)(https:\/\/youtu\.be\/.?(:\s\$)/);
$str='abchttps://www.youtube.com/watch?v=Dx5qFachd3A defhttps://youtu.be/Dx5qFachd3A ghi';
$embedStart='';
预匹配全部($re,$str,$matches,预设置顺序,0);
$str=preg_replace($re,$embedStart.$0'.$embedEnd,$str);
echo$str;

您可以用嵌入代码替换它。

到目前为止您尝试了什么?你被困在哪里?对于常规表达式来说,这似乎是一项简单的任务。我尝试了使用
substr
strpos
,但我认为这还不够。我不知道正则表达式,有没有一种方法或工具可以让我得到一个适合我需要的模式?嗨@Zuyas非常感谢你的回答。作为字符串
dsighksd siofh sdoifvh sdipov sdiopvhj sdviphjsd viopj sdpiovj sdpvioj sdviphsiǘghjsdhttps://www.youtube.com/watch?v=Dx5qFachd3A ivpjsdfpvihjsdf PVIJSDF pvijsdfvp wjfbawñhqwfu ghwqehttps://youtu.be/Dx5qFachd3A fuio cfhiouacfh weoauicfh
输出为:
[["https://www.youtube.com/watch?v=Dx5qFachd3A ",        "https://www.youtube.com/watch?v=Dx5qFachd3A",      ],      [        "https://youtu.be/Dx5qFachd3A ",        "",        "https://youtu.be/Dx5qFachd3A“,]”,]
是否可以实现
[match1,match2]
试试我的新用法示例,这对您有用吗?如果是,请标记为答案