【问题标题】:Split String between character and number into an array PHP将字符和数字之间的字符串拆分为数组PHP
【发布时间】:2020-07-21 23:12:19
【问题描述】:

我有一个如下所示的字符串:

$data1 = "W97";
$data2 = "RP100";
$data3 = "MAL89";
$data4 = "UNIQ95";

字符串会先包含一个字符,然后它会包含一个数字,我想将字符和数字之间的值拆分为数组,例如:

print_r($this->splitString($data1)); //array([0]=>'W',[1]=>97)
print_r($this->splitString($data2)); //array([0]=>'RP',[1]=>100)
print_r($this->splitString($data3)); //array([0]=>'MAL',[1]=>89)
print_r($this->splitString($data4)); //array([0]=>'UNIQ',[1]=>95)

function splitString($string){
  $result = array();
  //???
  return $result;
}

我该怎么做?

【问题讨论】:

    标签: php arrays regex string


    【解决方案1】:

    使用环视:

    $data1 = "W97";
    $data2 = "RP100";
    $data3 = "MAL89";
    $data4 = "UNIQ95";
    
    
    print_r(splitString($data1)); //array([0]=>'W',[1]=>97)
    print_r(splitString($data2)); //array([0]=>'RP',[1]=>100)
    print_r(splitString($data3)); //array([0]=>'MAL',[1]=>89)
    print_r(splitString($data4)); //array([0]=>'UNIQ',[1]=>95)
    
    function splitString($string){
      $result = array();
      $result = preg_split('/(?<=[A-Z])(?=\d)/', $string);
      return $result;
    }
    

    输出:

    Array
    (
        [0] => W
        [1] => 97
    )
    Array
    (
        [0] => RP
        [1] => 100
    )
    Array
    (
        [0] => MAL
        [1] => 89
    )
    Array
    (
        [0] => UNIQ
        [1] => 95
    )
    

    说明:

    (?<=[A-Z])      # positive lookbehind, make sure we have a capital letter before the current position
    (?=\d)          # positive lookahead, make sure we have a digit after the current position
    

    【讨论】:

      【解决方案2】:

      使用此方法对您有用。

      $data1      = "W2020";
      $data2      = "AB2020";
      $data3      = "ZXCV2020";
      
      print_r(splitString($data3));
      
      function splitString($string){
          $alpha_string = '';
          $num_string = '';
          $array2 = str_split( $string );
      
          foreach($array2 as $value){
              if(is_numeric($value))
                  $num_string .= $value;
               else
                  $alpha_string .= $value;
          }
          $data_array = array($alpha_string, $num_string);
      
          return $data_array;
      }
      

      就是这样。这将起作用。

      【讨论】:

        【解决方案3】:

        假设只有一个“字符”部分,后跟一个数字部分,此正则表达式将分别匹配它们:

        /^([A-Z]+)([0-9]+)$/
        

        用于preg_match(),结果如下:

        $regexp = '/^([A-Z]+)([0-9]+)$/';
        $string = 'ABC1234';
        $matches = [];
        
        preg_match($regexp, $string, $matches);
        
        var_dump($matches);
        
        // Output:
        array(3) {
          [0] =>
          string(7) "ABC1234"
          [1] =>
          string(3) "ABC"
          [2] =>
          string(4) "1234"
        }
        

        只需取消设置(或忽略)第一个索引,就可以开始了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-01
          • 2012-02-22
          • 2011-01-10
          相关资源
          最近更新 更多