2014-04-17 77 views
2

我知道這是一個初學者級別的問題,但我卡在這裏,我需要幫助。使用preg_match分隔每個字母PHP

我想將每個字母存儲在一個數組中。 (只有字母不是整數)

讓我告訴你,我現在用

$str = "ab c45 d123ef"; 
preg_match_all('/./us', $str, $ar); 
echo '<pre>'; 
print_r($ar); 

其輸出

Array 
(
    [0] => Array 
     (
      [0] => a 
      [1] => b 
      [2] => 
      [3] => c 
      [4] => 4 
      [5] => 5 
      [6] => 
      [7] => d 
      [8] => 1 
      [9] => 2 
      [10] => 3 
      [11] => e 
      [12] => f 
     ) 

) 

但它也單獨整數...我不得不改變以前的代碼在preg_match表達式中,我想要這個輸出。

Array 
(
    [0] => Array 
     (
      [0] => a 
      [1] => b 
      [2] => 
      [3] => c 
      [4] => 45 
      [5] => 
      [6] => d 
      [7] => 123 
      [8] => e 
      [9] => f 
     ) 

) 
+0

空格不是字母,你爲什麼要匹配它們? – Barmar

+1

我也想分開空格...但如果有任何整數,它不應該分開..這是可能的..? ( –

+0

'preg_match_all('/ \ d + | ./us',$ str,$ ar);' –

回答

2
preg_match_all('/[\d.]+|./us', $str, $ar); 

[\d.]一個數字或小數位時,+量詞是它們的序列匹配之後匹配。

結果:

Array 
(
    [0] => Array 
     (
      [0] => a 
      [1] => b 
      [2] => 
      [3] => c 
      [4] => 45 
      [5] => 
      [6] => d 
      [7] => 123 
      [8] => e 
      [9] => f 
     ) 

) 
+1

首先感謝,這是偉大的,它的工作,但只有一個小問題,如果你可以幫助我,如果我使用45.125它也分開它,例如:「45」「。」「125」,是它可能會按順序..然後再次感謝.. –

+0

查看更新的答案我認爲這應該是明顯的如何補充,如果你知道正則表達式的基本知識 – Barmar

+0

你真棒.. –

1

以使preg_split道:

$result = preg_split('/(?=\pL)|(?<=\pL)/', $str, -1, PREG_SPLIT_NO_EMPTY); 

您獲得:

Array 
(
    [0] => a 
    [1] => b 
    [2] => 
    [3] => c 
    [4] => 45 
    [5] => d 
    [6] => 123 
    [7] => e 
    [8] => f 
) 

目前的模式匹配兩種位置,位置後面有一個字母(?=\pL) ,並在前面加上一個字母​​。

+0

你會更好地解釋它是如何工作的,我知道正則表達式很好,它很混亂,而且你在輸出中缺少'45'後面的空格 – Barmar

+0

是的,你可以看到我在寫我的答案,我想把與45的空間。 –