我有一个网址:
$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);
答案 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>]