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