将URL分成几部分并找到ID(最长的部分)

时间:2017-06-09 12:08:02

标签: php regex

我有一个网址:

$url = 'https://docs.google.com/spreadsheets/d/1ljJpZDiayzMLhIJ-JDSIJjdjdY_xg3RrUDljFVRB0Qk/edit?usp=sharing#helloworld';

我想从此网址中获取ID。该ID 始终是网址1ljJpZDiayzMLhIJ-JDSIJjdjdY_xg3RrUDljFVRB0Qk中最长的部分,因此我的方法是定位最长的部分。

如何将此URL划分为多个部分并抓住最长的部分?我想在将其分成几部分时忽略查询变量部分?usp=sharing#helloworld

到目前为止我尝试了什么

我尝试使用正则表达式的preg_match_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);

5 个答案:

答案 0 :(得分:8)

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

功能parse_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;
    }
}

答案 1 :(得分:1)

$url = 'https://docs.google.com/spreadsheets/d/1ljJpZDiayzMLhIJ-JDSIJjdjdY_xg3RrUDljFVRB0Qk/edit?usp=sharing#helloworld';
$partURL=explode('/', $url);
$lengths = array_map('strlen', $partURL);
$maxLength = max($lengths);
$index = array_search($maxLength, $lengths);
echo $partURL[$index];

返回1ljJpZDiayzMLhIJ-JDSIJjdjdY_xg3RrUDljFVRB0Qk

答案 2 :(得分:0)

您可以使用此正则表达式:^.*\/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
        )

)

答案 3 :(得分:0)

你可以使用substr(string,start,length)

答案 4 :(得分:0)

例如,您可以使用PHP_URL_QUERY过滤parse_url结果

$query = parse_url(<url string>, PHP_URL_QUERY);
parse_str($parts, $queryArray);
$queryArray[<KEY>]