2017-04-16 87 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數組,其中數據存儲在用戶問題中的格式爲。 –

相關問題