PHP 正则表达式获取没有文件(或/和)参数的最后一个目录


PHP Regex getting the last directory without file (or/and) parameters

标题几乎是不言自明的,但只是为了更清楚......

我想要所有这些 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);