【问题标题】:PHP Regex — Remove all characters but first from last word in stringPHP Regex — 从字符串的最后一个单词中删除除第一个以外的所有字符
【发布时间】:2015-05-08 13:50:45
【问题描述】:

在发帖之前我研究了很长时间,但我找不到答案。

我正在尝试从字符串中删除除第一个字符之外的所有字符。该字符串将是一个名称。该名称可以具有名字和姓氏,以及中间名。所以我的任务是将字符串分解成单词并找到最后一个,删除字符并在第一个字母上添加一个点。此外,如果出现在字符串中,中间名不应出现在结果中。

例如:Chuck Ray Norris 应转换为 Chuck N.

我尝试了几个regexstrpos,但这个任务对我和我的技能来说太难了。

【问题讨论】:

  • 你说你尝试了一些东西。向我们展示那些东西。有错与否,很有帮助。

标签: php regex string character trim


【解决方案1】:

non-regex solution 用于“FirstName SecondName ThirdName... LastName”模式:

<?php
$str = "Chuck Ray Norris";
$spls = explode(" ", $str);
echo $spls[0] . " " . $spls[count($spls)-1][0] . ".";

输出:

Chuck N.

【讨论】:

  • 非常感谢您提供简单而优雅的解决方案!也感谢所有其他回答者建议的其他解决方案!
  • 不客气。不过,请将您尝试过的内容添加到您的问题中。
【解决方案2】:

你可以使用:

$s = 'Chuck Ray Norris';
$r = preg_replace('/^(\S+)\s+(?:\S+\s+)*(\S)\S*$/', '$1 $2.', $s);
//=> Chuck N.

$s = 'Chuck Norris';
$r = preg_replace('/^(\S+)\s+(?:\S+\s+)*(\S)\S*$/', '$1 $2.', $s);
//=> Chuck N.

$s = 'Chuck N.';
$r = preg_replace('/^(\S+)\s+(?:\S+\s+)*(\S)\S*$/', '$1 $2.', $s);
//=> Chuck N.

(?:\S+\s+)* 用于使 1 个或多个中间名可选。它还处理名称已经采用所需格式的情况(上面的情况 3)。

【讨论】:

    【解决方案3】:

    我不知道这是否可行,但试试这个

    <?php
    
    $fullName = 'Chuck Ray Norris';
    //$fullName = 'Chuck Ray';
    //$fullName = 'Chuck';
    
    $names = explode(' ', $fullName);
    if((count($names) == 3) && isset($names[2])){
        echo $names[0] . ' ' . $names[2][0] . '.';
    }else{
        if((count($names) == 2) && isset($names[1])){
            echo $names[0] . ' ' . $names[1][0] . '.';
        }else{
            echo $names[0];
        }
    }
    
    ?>
    

    尝试将 $fullName 更改为“Chuck Ray”或“Chuck”,它仍然可以工作。

    【讨论】:

      【解决方案4】:

      我会这样做:

      $pos = strrpos($string, " ");
      
      $pos = $pos === false ? 0 : $pos + 1;
      
      $char = substr($string,$pos,1);
      

      【讨论】:

        【解决方案5】:

        或者,如果它只是一个带有要求的字符串:

        查克·雷·诺里斯 -> 查克·N

        然后使用explode()substr()strlen()

        <?php
          $string = "Chuck Ray Norris";
        
          // break string into words
          $array = explode(" ", $string);
        
          // keep the first word, keep the last word's first character
          // ensure we have broken into vaid parts
          $length = count($array);
          if($length > 2) {
            // ie. Chuck Norris
            $first_word = $array[0];
            $last_word = $array[$length-1];
        
            // get first character, 
            $first_character = substr($last_word, 0, 1);
          }
          // else case is omitted
        
          print "$first_word $first_character\n"; // outputs Chuck N
        
        ?>
        

        string substr (string $string , int $start [, int $length ] )

        例如: substr($last_word, 0, 1)

        • int $start:“Norris”的长度是6,所以第一个位置是0
        • int $length:我们只需要 1 个字符,因此位置 0,“N”;

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2023-02-03
          • 1970-01-01
          • 2018-12-03
          • 1970-01-01
          • 2015-06-08
          • 2018-07-05
          • 2011-04-11
          • 1970-01-01
          相关资源
          最近更新 更多