标题几乎是不言自明的,但只是为了更清楚......
我想要所有这些 5 个选项:
http://www.example.com/directory1/directory2/?q=this/that/other
http://www.example.com/directory1/directory2/file.html
http://www.example.com/directory1/directory2/file.html?q=sometext
http://www.example.com/directory1/directory2/
http://www.example.com/directory1/directory2/?q=sometext
将返回:
http://www.example.com/directory1/directory2/
所以换句话说...
找到最后一个 ?(如果存在),然后找到最后一个/
并忽略之后的任何内容(之后无需捕获所有内容)
preg_match_all('/<a(.*?)href={HOW DO I SAY FIND THE **LAST ** /FROM THAT LINK, KEEP IT AND IGNORE EVERYTHING AFTERWARDS }>/s',$content,$images);
你可以做这样的事情:
$uri = "http://www.example.com/directory1/directory2/file.html";
$pos = strrpos($uri, "/");
$shortUri = substr(uri, 0, $pos);
使用
preg_match_all('~[^'?]*/~', $str, $match);
在没有零件的情况下获得一切 ?
.
正则表达式很棒,但使用正确的工具来完成这项工作:
$parts = parse_url($url);
$result = $parts['scheme'].$parts['host'].$parts['path'];
如果需要,可以在路径上使用dirname()
。另请注意,您可能还需要其他组件,例如端口等...
尝试使用parse_url
它分别返回主机、路径和查询。
// you can write something like
$url = parse_url($url);
$path = explode('/',$url['path']);
$lastDir = end($path);