Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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拆分为多个部分并找到ID(最长部分)_Php_Regex - Fatal编程技术网

Php 将URL拆分为多个部分并找到ID(最长部分)

Php 将URL拆分为多个部分并找到ID(最长部分),php,regex,Php,Regex,我有一个网址: $url = 'https://docs.google.com/spreadsheets/d/1ljJpZDiayzMLhIJ-JDSIJjdjdY_xg3RrUDljFVRB0Qk/edit?usp=sharing#helloworld'; 我想从这个URL中获取ID。ID始终是URL的最长部分,因此我的方法是针对最长部分 我怎样才能把这个URL分成几个部分,然后抓住最长的部分?我想在将查询变量part分解为多个部分时忽略它?usp=sharing#helloworld 到目

我有一个网址:

$url = 'https://docs.google.com/spreadsheets/d/1ljJpZDiayzMLhIJ-JDSIJjdjdY_xg3RrUDljFVRB0Qk/edit?usp=sharing#helloworld';
我想从这个URL中获取ID。ID始终是URL的最长部分,因此我的方法是针对最长部分

我怎样才能把这个URL分成几个部分,然后抓住最长的部分?我想在将查询变量part分解为多个部分时忽略它
?usp=sharing#helloworld

到目前为止我都试过了 我尝试了一种
preg\u match\u all()
方法,使用的正则表达式似乎没有正确地破坏URL:

$regex = '/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/';
$url = 'https://docs.google.com/spreadsheets/d/1ljJpZDiayzMLhIJ-JDSIJjdjdY_xg3RrUDljFVRB0Qk/edit?usp=sharing#helloworld';
$result = preg_match_all($regex, $url, $matches);
print($matches);

您可以使用此正则表达式:
^.*\/d\/(.*)\/.$
例如:

$regex = '/^.*\/d\/(.*)\/.*$/';
$url = 'https://docs.google.com/spreadsheets/d/1ljJpZDiayzMLhIJ-JDSIJjdjdY_xg3RrUDljFVRB0Qk/edit?usp=sharing#helloworld';
$result = preg_match_all($regex, $url, $matches);
print_r($matches);
因此,您将拥有:

Array
(
    [0] => Array
        (
            [0] => https://docs.google.com/spreadsheets/d/1ljJpZDiayzMLhIJ-JDSIJjdjdY_xg3RrUDljFVRB0Qk/edit?usp=sharing#helloworld
        )

    [1] => Array
        (
            [0] => 1ljJpZDiayzMLhIJ-JDSIJjdjdY_xg3RrUDljFVRB0Qk
        )

)

可以使用函数
explode
拆分数组中的字符串

和函数
parse_url()
来获取url的路径

$path = parse_url($url, PHP_URL_PATH);
$array = explode("/", $path);

编辑

如果要包含查询变量,可以添加这三行

parse_str($query,$queries);
$query = parse_url($url, PHP_URL_QUERY);
$array = array_merge($array, $queries);

现在你可以看看哪个部分最长

$id = "";
foreach($array as $part){
    if(strlen($id) < strlen($part)) {
        $id = $part;
    }
}
$id=”“;
foreach($array作为$part){
if(strlen($id)

返回
1ljJpZDiayzMLhIJ-JDSIJJDY\u xg3RrUDljFVRB0Qk
您可以使用substr(字符串、开始、长度)

例如,您可以使用PHP\u url\u查询过滤解析url结果

$query = parse_url(<url string>, PHP_URL_QUERY);
parse_str($parts, $queryArray);
$queryArray[<KEY>]
$query=parse\u url(,PHP\u url\u query);
分析\u str($parts,$queryray);
$queryArray[]

删除
https://docs.google.com/
使用
str\u replace
将字符串分解为“/”并找到存储id的索引。
parse\u url()
和/或
explode()
。尽量避免使用正则表达式。使用
/
拆分URL并查找数组中最长的字符串->@hjpotter92听起来可行,但我想忽略
?usp=sharing#helloworld
部分,因为偶尔,它比ID长。请随意发布答案。@hungrykoala URL并不总是以
https://docs.google.com/
——这只是一个示例。这不适用于所有URL。例如
https://drive.google.com/open?id=1ljJpZDiayzMLhTZcywUGyVkC2Y_xg3RrUDljFVRB0Qkss2
因此,我需要将URL分成几个部分,不管其设置如何,然后获取最长的部分(忽略查询变量)。@GoodbyeWorld在第二个示例中不能忽略查询部分,因为id是查询的一部分。您需要指定链接的类型,并对不同的url类型使用不同的解析器。这很好,但对url类型似乎不起作用:
https://drive.google.com/open?id=1ljJpZDiayzMLhTZcywUGyVkC2Y_xg3RrUDljFVRB0Qggk
我已经添加了几行,将查询包括在搜索中。谢谢!就是这个,请详细说明。
$query = parse_url(<url string>, PHP_URL_QUERY);
parse_str($parts, $queryArray);
$queryArray[<KEY>]