从给定字符串中删除第一个单词

时间:2011-03-06 12:41:17

标签: php replace

我正在尝试删除给定字符串中的第一个单词。到目前为止我已经完成了......

$word = 'removeMe|meow|whatever';

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

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

它工作得很好,但问题是 $ word 是这样的......

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

我不想删除第二个 $ needle 。有可能吗?怎么样? )

6 个答案:

答案 0 :(得分:3)

PHP preg_replace直接通过 limit 参数

支持此功能

像:

# now: removeMe|meow|removeMe|whatever

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

# now: |meow|removeMe|whatever

如果您的仅在开头出现,请执行。像一个简单的

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

应该足够了。

此致

RBO

答案 1 :(得分:1)

我会做这样的事情:

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

答案 2 :(得分:1)

爆炸功能的第三个参数限制单词分割的次数。这为我提供了一个非常干净的解决方案。来自php.net

  

如果设置了limit并为正数,则返回的数组将包含一个   最大元素,最后一个元素包含其余元素   字符串。

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

答案 3 :(得分:0)

试试这个:

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

答案 4 :(得分: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的答案。

答案 5 :(得分:0)

我会爆发,爆发,但这更好更短。 它会留下第一个管道符号。

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

如果您的字符串是空格分隔的,只需用空格

替换管道