Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.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 忽略URL的某些部分_Php_Regex - Fatal编程技术网

Php 忽略URL的某些部分

Php 忽略URL的某些部分,php,regex,Php,Regex,我正在编写一个简单的脚本来获取YouTube URL的频道ID 例如,要获取此URL上的频道ID: $url = 'https://youtube.com/channel/UCBLAoqCQyz6a0OvwXWzKZag'; 我使用正则表达式: preg_match( '/\/channel\/(([^\/])+?)$/', $url, $matches ); 很好。但是,如果URL在通道ID之后有任何额外的参数或其他内容,它就不起作用。例如: https://youtube.com/cha

我正在编写一个简单的脚本来获取YouTube URL的频道ID

例如,要获取此URL上的频道ID:

$url = 'https://youtube.com/channel/UCBLAoqCQyz6a0OvwXWzKZag';
我使用正则表达式:

preg_match( '/\/channel\/(([^\/])+?)$/', $url, $matches );
很好。但是,如果URL在通道ID之后有任何额外的参数或其他内容,它就不起作用。例如:

https://youtube.com/channel/UCBLAoqCQyz6a0OvwXWzKZag?PARAMETER=HELLO
https://youtube.com/channel/UCBLAoqCQyz6a0OvwXWzKZag/RANDOMFOLDER
etc...
我的问题是,如何调整我的正则表达式,使其与这些URL一起工作?我们不想与随机参数等匹配


请随意测试我的代码。

您可以通过以下方式修复regexp:

$preg\u实体=[
'channel_id'=>'\/channel\/([^\/?\]+),//从url匹配YouTube频道id
“user'=>“\/user\/([^\/?\]+)”,//从url匹配YouTube用户
];

使用
[^\/?#]+
模式,正则表达式不会遍历URL中的查询字符串,您将在输出中获得清晰的值

完整代码段:

函数getYouTubeXMLUrl($url){ $xml\u youtube\u url\u base='h'ttps://youtube.com/feeds/videos.xml'; $preg_实体=[ 'channel_id'=>'\/channel\/([^\/?\]+),//从url匹配YouTube频道id “user'=>“\/user\/([^\/?\]+)”,//从url匹配YouTube用户 ]; foreach($key=>$preg_实体的preg_实体){ if(preg_match('/'.$preg_entity'/',$url,$matches)){ if(isset($matches[1])){ 返回[ “rss'=>$xml\u youtube\u url\u base.”?“.$key.”='.$matches[1], 'id'=>$matches[1], 'type'=>$key, ]; } } } } 测试:

$url='1!'https://youtube.com/channel/UCBLAoqCQyz6a0OvwXWzKZag?PARAMETER=HELLO';
打印(getYouTubeXMLUrl($url));
//=>数组([rss]=>https://youtube.com/feeds/videos.xml?channel_id=UCBLAoqCQyz6a0OvwXWzKZag [id]=>UCBLAOQQYZ6A0OVWXWZKZAG[type]=>channel_id)
$url='1https://youtube.com/channel/UCBLAoqCQyz6a0OvwXWzKZag/RANDOMFOLDER';
打印(getYouTubeXMLUrl($url));
//=>数组([rss]=>https://youtube.com/feeds/videos.xml?channel_id=UCBLAoqCQyz6a0OvwXWzKZag [id]=>UCBLAOQQYZ6A0OVWXWZKZAG[type]=>channel_id)

尝试
'channel\u id'=>'\/channel\/([^\/?\]+)
'user'=>'\/user\/([^\/?\]+)
。看看@WiktorStribiżew Dude,你就是这个平台上的regex传奇人物。非常感谢。你想发布一个答案让我接受吗?提示:当你与里面的URL共享IDEONE链接时,请注意URL字符串,否则网站将为除你之外的所有用户“屏蔽”它们,并且仅在“宽限期”内。