如何从php字符串中删除第一个单词
我想使用PHP从字符串中删除第一个单词。 尝试搜索,但找不到我能理解的答案 例如:“白色坦克顶部”,所以它变成了“坦克顶部” 谢谢如何从php字符串中删除第一个单词,php,word,Php,Word,我想使用PHP从字符串中删除第一个单词。 尝试搜索,但找不到我能理解的答案 例如:“白色坦克顶部”,所以它变成了“坦克顶部” 谢谢 ?无需分解或数组操作,您可以使用以下功能: 更新:由于@Sid删除了额外的空白,您可以执行以下操作: echo substr(strstr("White Tank Top"," "), 1); 请尝试此函数,我希望它对您有用。您可以将preg\u replace函数与正则表达式^(\w+\s)一起使用,该正则表达式将匹配字符串的第一个字本身: $str = "Wh
?无需分解或数组操作,您可以使用以下功能: 更新:由于@Sid删除了额外的空白,您可以执行以下操作:
echo substr(strstr("White Tank Top"," "), 1);
请尝试此函数,我希望它对您有用。您可以将
preg\u replace
函数与正则表达式^(\w+\s)
一起使用,该正则表达式将匹配字符串的第一个字本身:
$str = "White Tank Top";
$str = preg_replace("/^(\w+\s)/", "", $str);
var_dump($str); // -> string(8) "Tank Top"
如果不能保证字符串中有空格,请小心选择在这种情况下不会失败的技术 如果使用
explode()
请确保限制爆炸以获得最佳效率
:
输出:
White:
- White
- White
- // strstr() returned false
- // strstr() returned false
- White
White Tank:
- Tank
- Tank
- Tank
- Tank
- Tank
White Tank Top:
- Tank Top
- Tank Top
- Tank Top
- Tank Top
- Tank Top
我更喜欢正则表达式技术,因为它在上述所有情况下都是稳定的,并且是一个单一的函数调用。请注意,不需要捕获组,因为正在替换fullstring匹配项
^
匹配字符串的开头,\S+
匹配一个或多个非空白字符,\S
匹配一个空白字符。您是指第一个空格之前的字符吗?您能否将其压缩为返回内爆('',数组移位('',句子))代码>?我对php从来都不是很确定。这个解决方案占用了大量内存。如果字符串有很多空格,数组就会变大。amosrivera的解决方案要好得多(虽然不完全,因为它也保留了空格字符)。@Patrick Perini:no-array_shift()返回数组中的第一个元素,而不是修改后的元素array@Sid:首先,amosrivera的答案在语义上是不同的(考虑不包含空格的字符串会发生什么情况)此外,我几乎不会称之为内存占用者——我希望它使用的内存比amosrivera的答案要多——但如果不测试每种方法,我无法判断哪种方法在系统上的有效占用空间更大。不管是不是内存占用者,这个答案缺少一个解释。关键是,您的代码片段执行了太多的爆炸。请看我的有限爆炸。这比数组操作答案要好,但是这也会留下空格字符。这可以通过执行echo substr(strstr(“白色水箱顶部”),1)来切断+1为了简单起见,我总是忘记strtr
。当我看到你的答案时,我正准备用strpos键入3行。添加一个ltrim
,以防有多个空格,而您是金色的。@Sid开头的空格是白色的吗?我只是检查了一下,效果很好。你能验证一下吗?@Fanis我完全理解你,在php中有这么多不同的字符串操作函数很容易忘记。@amosrivera like@Sid说它将包含匹配的空间。通过在网页上回显,您将不容易看到它,但可以执行strlen
或在调试器中运行它,您将发现它:)
echo substr(strstr("White Tank Top"," "), 1);
function remove_word($sentence)
{
$exp = explode(' ', $sentence);
$removed_words = array_shift($exp);
if(count($exp)>1){
$w = implode(' ', $exp);
}else{
$w = $exp[0];
}
return $w;
}
$str = "White Tank Top";
$str = preg_replace("/^(\w+\s)/", "", $str);
var_dump($str); // -> string(8) "Tank Top"
$strings = ["White", "White Tank", "White Tank Top"];
foreach ($strings as $string) {
echo "\n{$string}:";
echo "\n-\t" , substr($string, 1 + (strpos($string, ' ') ?: -1));
$explodeOnce = explode(' ', $string, 2);
echo "\n-\t" , end($explodeOnce);
echo "\n-\t" , substr(strstr($string, " "), 1);
echo "\n-\t" , ltrim(strstr($string, " "));
echo "\n-\t" , preg_replace('~^\S+\s~', '', $string);
}
White:
- White
- White
- // strstr() returned false
- // strstr() returned false
- White
White Tank:
- Tank
- Tank
- Tank
- Tank
- Tank
White Tank Top:
- Tank Top
- Tank Top
- Tank Top
- Tank Top
- Tank Top