2017-04-16 89 views
2

我有一个包含字母或数字的字符串。在PHP中使用正则表达式将字符串转换为包含数字和字母表的数组?

AB1D21E48EFGHI1K 

我想将该字符串拆分为数组,如下所示。

[0] => A 
[1] => B 
[2] => 1 
[3] => D 
[4] => 21 
[5] => E 
[6] => 48 
[7] => E 
[8] => F 
[9] => G 
[10] => H 
[11] => I 
[12] => 1 
[13] => K 

但是,我越来越阵列如下:

[0] => Array (
    [0] => AB 
    [1] => 1 
    [2] => D 
    [3] => 21 
    [4] => E 
    [5] => 48 
    [6] => EFGHI 
    [7] => 1 
    [8] => K 
) 

到目前为止我尝试下面的代码。

$string = 'AB1D21E48EFGHI1K'; 
preg_match_all('/([0-9]+|[a-zA-Z]+)/', $string, $matches); 
print_r($matches); 
+0

您想要的输出? – Bhaskar

+1

使用'([0-9] + | [a-zA-Z] {1})'或者更简单的'(\ d + | \ w {1})' – Mohammad

+0

@Mohammad,谢谢。它帮助 – sanin

回答

1

你应该字字符后删除+与长度1匹配。所以,你的正则表达式应该是

/([0-9]+|[a-zA-Z])/ 

你可以让你的正则表达式简单

/\d+|\w/ 

代码改为

$string = 'AB1D21E48EFGHI1K'; 
preg_match_all('/\d+|\w/', $string, $matches); 
print_r($matches); 

检查结果demo

+1

''[0-9] + | [a-zA-Z]' – splash58

+0

'\ w'与'[a-zA-Z]'不一样' – Toto

+0

@Toto你说得对,但在这种情况下,正常。 – Mohammad

1

请尝试这样的方式,它可能对你有用

<?php 
$data = array(0 => AB,1 => 1, 2 => D, 3 => 21, 4 => E, 5 => 48, 6 => EFGHI, 7 => 1, 8 => K); 

/*print "<pre>"; 
print_r($data); 
print "<pre>";*/ 


$new_data = array(); 
foreach($data as $key => $value){ 

    if (!preg_match('/[^A-Za-z]/', $value)) // '/[^a-z\d]/i' should also work. 
    { 
    // string contains only english letters 
    $arr1 = str_split($value); 
    foreach($arr1 as $row => $val){ 
     $new_data[] = $val; 
    } 
    }else{ 
    $new_data[] = $value; 
    } 

} 

/* 
print "<pre>"; 
print_r($new_data); 
print "<pre>";*/ 

?> 
+0

'$ data'从哪里来? – Toto

+0

根据上面的问题,我创建了一个$ data数组,其中数据存储在用户问题中的格式为。 –

相关问题