删除特定字符的最后一个实例后的所有字符

时间:2014-12-23 13:36:47

标签: php string substring

如何在最后一次出现斜杠字符/后删除字符串中的所有内容?

例如,字符串是:

http://localhost/new-123-rugby/competition.php?croncode=12345678

我想删除上一个/之后的所有内容,以便它只显示:

http://localhost/new-123-rugby/

/之后的内容可能是一个可变长度。

请注意,网址中可能包含任意数量的斜杠。它需要能够删除最后一个斜杠后的内容。上面的示例中可能会显示更多内容。

3 个答案:

答案 0 :(得分:2)

你可以试试这个

$url = "http://localhost/new-123-rugby/competition.php?croncode=12345678";
preg_match("/[^\/]+$/", $url, $matches);
$newUrl = str_replace($matches[0],'',$url);
echo $newUrl;

答案 1 :(得分:1)

解决方案#1,使用substr() + strrpos()

$string = 'http://localhost/new-123-rugby/competition.php?croncode=12345678';
$pos = strrpos($string, '/');
if ($pos !== FALSE) {
    echo(substr($string, 0, $pos + 1));
}

函数strrpos()找到字符串中/出现最后的位置,substr()提取所需的子字符串。

缺点:如果$string不包含'/',则strrpos()会返回FALSEsubstr()不会返回我们想要的内容。需要首先检查strrpos()返回的值。

解决方案#2,使用explode() + implode()

$string = 'http://localhost/new-123-rugby/competition.php?croncode=12345678';
$array  = explode('/', $string);
if (count($array) > 1) {
    array_pop($array);               // ignore the returned value, we don't need it
    echo(implode('/', $array).'/');  // join the pieces back, add the last '/'
}

或者,我们可以将最后一个组件设为空,而不是array_pop($array),而不需要在末尾添加额外的'/'

$string = 'http://localhost/new-123-rugby/competition.php?croncode=12345678';
$array  = explode('/', $string);
if (count($array) > 1) {
    $array[count($array) - 1] = '';  // empty the last component
    echo(implode('/', $array));  // join the pieces back
}

缺点(对于这两个版本):如果$string不包含'/'explode()会生成一个包含单个值的数组,其余代码生成'/'(第一段代码)或空字符串(第二段)。需要检查由explode()生成的数组中的项目数。

解决方案#3,使用preg_replace()

$string = 'http://localhost/new-123-rugby/competition.php?croncode=12345678';
echo(preg_replace('#/[^/]*$#', '/', $string));

缺点:无。如果$string包含'/''/'不包含$string(在这种情况下它不会修改{{1}}),则效果很好。

答案 2 :(得分:-3)

NOTA:

对问题进行了编辑,以便原始答案(编辑下方)与OP的要求不匹配。它没有被标记为OP的编辑。

<小时/> 修改

更新了我的答案,现在它符合OP的要求:

(现在它可以使用任意数量的斜杠)

也可以使用
http://localhost/new-123-rugby////////competition.php?croncode=12345678

<?php

    $url = "http://localhost/new-123-rugby/competition.php?croncode=12345678";
    echo dirname($url) . "/";

?>

输出:

http://localhost/new-123-rugby/

原始答案:

这应该适合你:

<?php

    $string = "http://localhost/new-123-rugby/competition.php?croncode=12345678";
    echo $string = substr($string, 0, strpos(strrev($string), "/")-2);

?>

输出:

http://localhost/new-123-rugby/

演示:http://ideone.com/0R9QUG