PHP正则表达式:删除最后匹配的模式字符串

4
我有以下网址。
http://domain.com/baby/smile/love/index.txt
http://domain.com/baby/smile/love/toy.txt
http://domain.com/baby/smile/love/car.html
and so on...

使用 preg 正则表达式,如何删除文件名右侧的内容?我猜需要从右侧开始匹配第一个破折号,该怎么做呢?

例如,如果我运行以下命令:

$newUrl = preg_match('xxxxxx', '', $url);

或者使用以下方式:

$newURL = preg_replace(...);
$newUrl变量将仅包含。
http://domain.com/baby/smile/love/

保留结尾斜杠。我能够使用explode(),array_pop(),然后implode()来重新整合它,只是想知道是否可以仅使用正则表达式就能实现。谢谢。

如果你需要一个不含正则表达式的解决方案,请尝试这个代码 echo substr($link1,0,strrpos($link1,'/')+1); - Shankar Narayana Damodaran
3个回答

4
您可以使用以下方法。
function clean($url) {
   $link = substr(strrchr($url, '/'), 1);
   return substr($url, 0, - strlen($link));
}

echo clean($url);

请查看实时演示

使用正则表达式:

$newUrl = preg_replace('~[^/]*$~', '', $url);

请查看实时演示


非常感谢,这个 preg_replace 正是我所需要的。 - user702300

3
<?php
$str = 'http://domain.com/baby/smile/love/index.txt';

$str = preg_replace('/(.*\/).*/', '$1', $str);
print $str;

输出:

http://domain.com/baby/smile/love/

1
这应该能够工作:

$s = 'http://domain.com/baby/smile/love/index.txt';

if (preg_match_all('~^.+?/(?!.*?/)~', $s, $matches))
        print_r ( $matches[0] );

输出:
Array
(
    [0] => http://domain.com/baby/smile/love/
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接