我正在尝试删除给定字符串中的第一个单词。到目前为止我已经完成了......
$word = 'removeMe|meow|whatever';
$needle = 'removeMe';
$haystack = ''; // To replace with.
$word = str_replace( $needle, $haystack, $word );
它工作得很好,但问题是 $ word 是这样的......
$word = 'removeMe|meow|removeMe|whatever';
我不想删除第二个 $ needle 。有可能吗?怎么样? )
答案 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,'|');
如果您的字符串是空格分隔的,只需用空格
替换管道