2014-04-17 78 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的空间。 –