从给定的字符串中只删除第一个字
我试图从给定的字符串中删除第一个字。到目前为止,我做...从给定的字符串中只删除第一个字
$word = 'removeMe|meow|whatever';
$needle = 'removeMe';
$haystack = ''; // To replace with.
$word = str_replace($needle, $haystack, $word);
它的工作很好,但问题是,当$字是这样的......
$word = 'removeMe|meow|removeMe|whatever';
我不想删除第二$针。这是可能的和如何? )
不幸的是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);
没有评论的Downvotes ===不酷。 – lonesomeday 2011-03-06 12:59:05
试试这个:
$index = strpos($word, '|');
$word = substr($word, 0, $index);
或'$ index + 1'也可以删除'|'。 – 2011-03-06 12:45:48
是的,但是因为他的例子不删除'|'... – krtek 2011-03-06 12:46:35
删除第一个单词*不管它是否匹配'$ 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];
你的问题是有点含糊。你想只删除给定字符串的第一次出现,还是仅仅在开始时出现? – 2011-03-06 12:49:20
对不起,我的不好解释。只有,如果它出现在开头。 – daGrevis 2011-03-06 12:50:28