如何使用PHP从字符串中删除最后一个单词?
例如,字符串"Hi, I'm Gian Marco"
将变为"Hi, I'm Gian"
。
试试这个:
$txt = "Hi, I'm Gian Marco";
$str= preg_replace('/'W'w+'s*('W*)$/', '$1', $txt);
echo $str
输出
Hi, I'm Gian
检查此
<?php
$str ='"Hi, I''m Gian Marco" will be "Hi, I''m Gian"';
$words = explode( " ", $str );
array_splice( $words, -1 );
echo implode( " ", $words );
?>
source:从字符串中删除最后两个单词
您可以使用正则表达式来实现。(见Ahmed Ziani的回答。)
然而,在PHP中,您也可以使用一些内置函数来完成此操作。请参阅下面的代码
$text = "Hi, I'm Gian Marco";
$last_space_position = strrpos($text, ' ');
$text = substr($text, 0, $last_space_position);
echo $text;
如果您不知道最后一个单词并且字符串长度较短,则当前解决方案是可以的。
如果您知道,例如,当为如下查询循环concat字符串时:
foreach ($this->id as $key => $id) {
$sql.=' id =' . $id . ' OR ';
}
更好的解决方案:
$sql_chain = chop($sql_chain," OR ");
请注意,带有regex的preg_replace对于长字符串来说非常慢。在这种情况下,Chop的速度是原来的100倍,性能增益可能相当可观。
当字符串具有特殊字符时,正则表达式可能会导致问题。为什么不简单地使用这个:
$input = "Hi, I'm Gian Marco";
$output = substr($input, 0, strrpos($input, " "));
echo $output;
此代码可能会帮助您:
$str="Hi, I'm Gian Marco";
$split=explode("",$str);
$split_rem=array_pop($split);
foreach ($split as $k=>$v)
{
echo $v.'';
}
将str
和explode(delimiter, string)
分解成一个数组$words
,将第一个单词放入$res
,并在单词上迭代$words
次的计数减去一,该计数不包括最后一个单词。
$str = "Hi, I'm Gian Marco";
$words = explode(" ",$str);
$res = $words[0];
for ($i=1; $i < count($words) - 1; $i++) {
$res .= ' '.$words[$i]; // concatenation with a space.
}
echo $res; // Hi, I'm Gian
在搜索ltrim和rtrim的替代方案(修剪整个第一个/最后一个单词)时,我遇到了这样的帖子。我只想分享我写的函数,当其他人像我一样登陆这里时。
找出给定单词的第一个出现,如果它是第一个单词,则返回不包含第一个单词的句子。
function leftStrTrim($sentence, $word){
$wordLength = strlen($word);
$wordStart = strpos($sentence, $word);
if($wordStart!==false && $wordStart==0){
return substr($sentence, $wordLength);
}
return $sentence;
}
找出给定单词的最后一个出现,如果它是最后一个单词,则返回没有最后一个词的句子。
function righStrTrim($sentence, $word){
$wordLength = strlen($word);
$wordStart = strrpos($sentence, $word);
if($wordStart!==false && $wordStart == strlen($sentence)-$wordLength){
return substr($sentence, 0, $wordLength*-1);
}
return $sentence;
}