2011-08-21 106 views
0

我想看看是否有一種方法來做到這一點沒有preg_replace,只是字符串函數。高效的字符串結束替換

我用這

$str = "-41d3vUYHtK3D-GI3QXiVhvfR-zNooU7U_--2697"; 
preg_replace("/\-\d+$/i","",$str) 

刪除下面的一切,包括最後的「衝刺」

回答

3

如果它不是最後一個字符必須是數字的要求,那麼你可以使用substr[docs]strrpos[docs]

$str = substr($str, 0, strrpos($str, '-')); 

或者在PHP 5.3.0,strstr[docs]

$str = strstr($str, '-', true); 

如果,另一方面,你想,如果以下字符是數字,然後使用正則表達式將是更簡單的方法來刪除最後一個儀表板和字符只有

+0

返回'-41d3vUYHtK3D-GI3QXiVhvfR-zNooU7U_-',1。減去從strrpos得到破折號爲好。 – Robus

+1

@Robus:原始字符串中有兩個連續的破折號。代碼正在做正則表達式所做的事情,它只會刪除最後一個。 –

+0

@Felix Kling:你是......對。我的錯誤 – Robus

2
$str = "-41d3vUYHtK3D-GI3QXiVhvfR-zNooU7U_--2697"; 

for($i=strlen($str)-1;$i>=0;$i--){ 
    if($str[$i] == '-'){ 
     $result = substr($str,0,$i); 
     break; 
    } 

} 
echo $result; 

返回-41d3vUYHtK3D-GI3QXiVhvfR-zNooU7U_-

+0

這是一個有趣的方式,以及robus,謝謝 – david