正则表达式PHP拆分号码和字符串

时间:2013-10-22 10:27:32

标签: php regex split match

我想拆分一个包含一些数字和字母的字符串。像这样:

ABCd Abhe123
123ABCd Abhe
ABCd Abhe 123
123 ABCd Abhe

我试过了:

<?php preg_split('#(?<=\d)(?=[a-z])#i', "ABCd Abhe 123"); ?>

但它不起作用。阵列中只有一个单元格带有“ABCd Abhe 123”
我想例如,在单元格0:数字和单元格1:字符串:

[0] => "123",
[1] => "ABCd Abhe"

感谢您的帮助! ;)

2 个答案:

答案 0 :(得分:2)

使用preg_match_all代替

preg_match_all("/(\d+)*\s?([A-Za-z]+)*/", "ABCd Abhe 123" $match);

每场比赛:

  • $match[i][0]包含匹配的细分
  • $match[i][1]包含数字
  • $match[i][2]包含字母

(请参阅here进行正则表达式测试)

然后将它们放入数组

for($i = 0; $i < count($match); $i++)
{
    if($match[i][1] != "")
        $numbers[] = $match[1];

    if($match[i][2] != "")
        $letters[] = $match[2];
}

EDIT1

我已更新the regex。它现在查找数字或字母,有或没有空格。


EDIT2

正则表达式是正确的,但是数组处理不是。使用preg_match_all,然后$match是一个包含数组的数组,如:

Array
(
    [0] => Array
        (
            [0] => Abc
            [1] =>  aaa
            [2] => 25
        )

    [1] => Array
        (
            [0] => 
            [1] => 
            [2] => 25
        )

    [2] => Array
        (
            [0] => Abc
            [1] => aaa
            [2] => 
        )

)

答案 1 :(得分:0)

也许是这样的?

$numbers = preg_replace('/[^\d]/', '', $input);
$letters = preg_replace('/\d/', '', $input);