Php 将字符和数字之间的字符串拆分为一个数组

Php 将字符和数字之间的字符串拆分为一个数组,php,arrays,regex,string,Php,Arrays,Regex,String,我有一个字符串如下所示: $data1 = "W97"; $data2 = "RP100"; $data3 = "MAL89"; $data4 = "UNIQ95"; 字符串将首先包含一个字符,然后它将包含一个数字,我想将字符和数字之间的字符串拆分为数组,例如: print_r($this->splitString($data1)); //array([0]=>'W',[1]=>97) print_r($this->splitString($data2)); //arr

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

$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;
}

我如何才能做到这一点?

假设只有一个“字符”部分,后跟一个数字部分,此regexp将分别匹配这两个部分:

/^([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"
}

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

使用此方法这将对您有效

$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;
}
就这样。这将起作用。

使用环视:

$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