3

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

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"

谢谢您的帮助!;)

4

2 回答 2

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]包含字母

(见这里进行正则表达式测试)

然后将它们放在一个数组中

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

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

编辑1

我已经更新了正则表达式。它现在查找数字或字母,带或不带空格。


编辑2

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

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

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

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

)
于 2013-10-22T10:33:08.333 回答
0

也许是这样的?

$numbers = preg_replace('/[^\d]/', '', $input);
$letters = preg_replace('/\d/', '', $input);
于 2013-10-22T10:35:16.700 回答