在最后一个连字符

时间:2016-05-05 16:39:29

标签: php regex string

我想在字符串中删除最后一个连字符和后面的任何内容。看了之后我找到了第一个连字符但不是最后一个连字符的东西:

$str = 'sdfsdf-sdfsdf-abcde';
$str = array_shift(explode('-', $str));

当前字符串

$str = 'sdfsdf-sdfsdf-abcde';

期望的结果

$str = 'sdfsdf-sdfsdf';

4 个答案:

答案 0 :(得分:1)

您可以使用此preg_replace

$repl = preg_replace('/-[^-]*$/', '', $str);
//=> sdfsdf-sdfsdf

-[^-]*$将匹配-,后跟0行或更多非连字符字符。

答案 1 :(得分:0)

您可以使用strrpos获取最后一个索引,然后使用substr获得所需的结果。

$str = 'sdfsdf-sdfsdf-abcde';
$pos = strrpos($str , "-");
if ($pos !== false) {
   echo substr($str, 0, $pos);
}

答案 2 :(得分:0)

你关闭了。只需稍后使用array_pop()代替array_shift(). array_pop()removes last element of array. You need, of course, use implode()`将strign再次放在一起。

$arr = explode('-', $str);
array_pop($arr);
$str = implode('-', $arr);

重要的是不要在一行中执行此操作,因为array_pop()处理对数组的引用并对其进行修改,然后仅返回已删除的元素。

其他答案还提到了一些其他可能的解决方案。

答案 3 :(得分:0)

这有点笨重,但它适合你:

$str = 'sdfsdf-sdfsdf-abcde';
$pieces = explode("-",$str);
$count = count($pieces);

for ($x = 0; $x <= $count - 2; $x++) {
   $desired_result .= $pieces[$x].'-';
} 
$desired_result = substr($desired_result, 0, -1);

echo $desired_result;

如果你有很多这些,你可以使用这个功能:

function removeLast($str){
    $pieces = explode("-",$str);
    $count = count($pieces);

    for ($x = 0; $x <= $count - 2; $x++) {
       $desired_result .= $pieces[$x].'-';
    } 
    $desired_result = substr($desired_result, 0, -1);

    return $desired_result;
}

你叫它:

$str = 'sdfsdf-sdfsdf-abcde';
$my_result = removeLast($str);