2011-03-06 108 views
1

我試圖從給定的字符串中刪除第一個字。到目前爲止,我做...從給定的字符串中只刪除第一個字

$word = 'removeMe|meow|whatever'; 

$needle = 'removeMe'; 
$haystack = ''; // To replace with. 

$word = str_replace($needle, $haystack, $word); 

它的工作很好,但問題是,當$字是這樣的......

$word = 'removeMe|meow|removeMe|whatever'; 

我不想刪除第二$針。這是可能的和如何? )

+1

你的問題是有點含糊。你想只刪除給定字符串的第一次出現,還是僅僅在開始時出現? – 2011-03-06 12:49:20

+0

對不起,我的不好解釋。只有,如果它出現在開頭。 – daGrevis 2011-03-06 12:50:28

回答

0

不幸的是PHP默認不支持這一點。這裏有一個功能做:

function str_replace_once($needle, $replace, $haystack){ 
    $pos = strpos($haystack, $needle); 
    if ($pos === false) { 
     return $haystack; 
    } 
    return substr_replace($haystack, $replace, $pos, strlen($needle)); 
} 

如果希望只在字符串的開頭替換的文本:

$str = preg_replace('/^'.preg_quote($word, '/').'/', '', $str); 

如果字符串其實是一個| - 分隔列表,請參閱@ lonesomeday的答案。

1

我會做這樣的事情:

$words = explode('|', $word); 
if ($words[0] === $needle) { 
    unset($words[0]); 
} 
$word = implode('|', $words); 
+0

沒有評論的Downvotes ===不酷。 – lonesomeday 2011-03-06 12:59:05

0

試試這個:

$index = strpos($word, '|'); 
$word = substr($word, 0, $index); 
+0

或'$ index + 1'也可以刪除'|'。 – 2011-03-06 12:45:48

+0

是的,但是因爲他的例子不刪除'|'... – krtek 2011-03-06 12:46:35

+0

刪除第一個單詞*不管它是否匹配'$ needle'。我不認爲這是提問者想要的(儘管我承認問題很模糊)。 – lonesomeday 2011-03-06 12:46:50

2

PHP的preg_replace支持這種直接通過限制參數

,如:

# now: removeMe|meow|removeMe|whatever 

$word = preg_replace("/$needle/", $haystack, $word, 1); 

# now: |meow|removeMe|whatever 

如果您只出現之初,某事。像一個簡單的

$word = preg_replace("/^$needle/", $haystack, $word); 

應該就足夠了。

問候

RBO

0

我本來打算一起去的爆炸,內爆,但這是更好和更短。 它會留下第一個管道符號。

echo $ string = strstr($ string,'|');

如果你的字符串空格分開,只是一個空間的爆炸功能可以限制這個詞多少次拆分

1

第三個參數更換管道。這爲我提供了一個非常乾淨的解決方案。從php.net

如果限制設置和肯定的,則返回的數組將包含 最大限制元件與含有 串的其餘部分的最後一個元素的。

$split = explode('|', $word, 2); 
$word = $split[1]; 
相關問題