【问题标题】:PHP: How can I remove from String the last word?PHP:如何从字符串中删除最后一个单词?
【发布时间】:2015-06-08 07:45:49
【问题描述】:

如何使用 PHP 删除字符串中的最后一个单词?

例如,字符串"Hi, I'm Gian Marco" 将变为"Hi, I'm Gian"

【问题讨论】:

  • 我不知道String的内容!我只想删除最后一个单词(不是最后一个字符)。
  • @MamounBenghezal 这是一个 java 问题的副本吗?
  • @Loko,我错了。

标签: php string replace


【解决方案1】:

试试这个:

$txt = "Hi, I'm Gian Marco";
$str= preg_replace('/\W\w+\s*(\W*)$/', '$1', $txt);
echo $str

输出

Hi, I'm Gian

【讨论】:

  • 好(泰)!!!如果字符串以“Gian@Marco.it 29348 39388”之类的数字结尾,我想删除“39388”? (我不知道数字)
  • @Kiuki 试试这个:$str= preg_replace('~\\s+\\S+$~', "", $txt);
【解决方案2】:

检查一下

 <?php
$str ='"Hi, I\'m Gian Marco" will be "Hi, I\'m Gian"';
$words = explode( " ", $str );
array_splice( $words, -1 );

echo implode( " ", $words );
?>

来源:Remove last two words from a string

【讨论】:

  • 支持它,因为它在不使用正则表达式的情况下回答了 OP 的问题。
【解决方案3】:

你可以用正则表达式来做到这一点。 (参见Ahmed Ziani 的回答。

但是,在 PHP 中,您也可以使用一些内置函数来实现。看下面的代码

$text = "Hi, I'm Gian Marco";
$last_space_position = strrpos($text, ' ');
$text = substr($text, 0, $last_space_position);
echo $text;

【讨论】:

  • 它的 strpos($text, ' '); 不是 strrpos($text, ' ');
【解决方案4】:

如果不知道最后一个单词且字符串长度较短,目前的解决方案是可以的。

如果你确实知道它,例如在为这样的查询循环连接字符串时:

        foreach ($this->id as $key => $id) {
            $sql.=' id =' . $id . ' OR ';
        }

更好的解决方案:

        $sql_chain = chop($sql_chain," OR ");

请注意,带有正则表达式的 preg_replace 对于长字符串会非常慢。 在这种情况下,Chop 的速度提高了 100 倍,并且性能提升非常可观。

【讨论】:

    【解决方案5】:

    此代码可能对您有所帮助:

    $str="Hi, I'm Gian Marco";
    
    $split=explode("",$str);
    $split_rem=array_pop($split);
    foreach ($split as $k=>$v)
    {
       echo $v.'';
    }
    

    【讨论】:

    • 你的explode 需要一个delimiter 作为一个空格 而不是一个空字符串,否则你会得到一个致命错误:*Uncaught ValueError: explode(): 参数 #1 ($separator) 不能为空*。与foreach 中的连接相同的通知需要一个空格。或不使用 foreach 仅使用 implode(" ", $split)
    【解决方案6】:

    当字符串包含特殊字符时,正则表达式可能会导致问题。为什么不简单地这样做:

    $input = "Hi, I'm Gian Marco";
    $output = substr($input, 0, strrpos($input, " "));
    echo $output;
    

    【讨论】:

      【解决方案7】:

      strexplode(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
      

      【讨论】:

        【解决方案8】:

        在寻找 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;    
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-14
          • 1970-01-01
          • 2011-10-12
          • 2016-01-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多