从给定的字符串中只删除第一个字

问题描述:

我试图从给定的字符串中删除第一个字。到目前为止,我做...从给定的字符串中只删除第一个字

$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

不幸的是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的答案。

我会做这样的事情:

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

没有评论的Downvotes ===不酷。 – lonesomeday 2011-03-06 12:59:05

试试这个:

$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

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

我本来打算一起去的爆炸,内爆,但这是更好和更短。 它会留下第一个管道符号。

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

如果你的字符串空格分开,只是一个空间的爆炸功能可以限制这个词多少次拆分

第三个参数更换管道。这为我提供了一个非常干净的解决方案。从php.net

如果限制设置和肯定的,则返回的数组将包含 最大限制元件与含有 串的其余部分的最后一个元素的。

$split = explode('|', $word, 2); 
$word = $split[1];