PHP RegEx拆分为2D数组?

时间:2014-10-29 13:14:57

标签: php regex

是否可以使用PHP和preg_match_all将以下字符串转换为数组,例如

字符串将始终是一个字符,一个数字后跟一个空格。

String: "C1 X2 B10"

$array[0][type]=>"C"

$array[0][number]=>1

$array[1][type]=>"X"

$array[1][number]=>2

$array[2][type]=>"B"

$array[2][number]=>10

2 个答案:

答案 0 :(得分:0)

当然,你总是可以使用正则表达式来更快地使用WAAAAY,但我想告诉你,你可以在没有正则表达式的情况下做到这一点。有更多方法可以解决问题。作为Harvey Spectre,来自" Suits"会说:"如果有人用枪指着你的头,有146种方法可以保护自己" ;)

在这里......试试这个:

$string = 'C1 X2 B10';

$explode = explode(' ', $string);

$i = 0;
foreach ($explode as $exp){
    $number = substr($exp, 1);
    $letter = substr($exp, 0, 1);
    $array[$i]['type'] = $letter;
    $array[$i]['number'] = $number;

    $i++;
}

echo '<pre>';
print_r($array);
echo '</pre>';

输出将是:

Array
(
    [0] => Array
        (
            [type] => C
            [number] => 1
        )

    [1] => Array
        (
            [type] => X
            [number] => 2
        )

    [2] => Array
        (
            [type] => B
            [number] => 10
        )

)

警告!! 此解决方案仅在您只有一个字母时才有效,只在开头,字符串中有空格分隔元素!

希望这有帮助! :d

答案 1 :(得分:0)

您可以在正则表达式中使用命名组:

$str = "C1 X2 B10";
$re = '~(?P<type>[A-Z])(?P<number>\d+)~';
preg_match_all($re, $str, $m, PREG_SET_ORDER);
print_r($m);

给你

Array
(
    [0] => Array
        (
            [0] => C1
            [type] => C
            [1] => C
            [number] => 1
            [2] => 1
        )

    [1] => Array
        (
            [0] => X2
            [type] => X
            [1] => X
            [number] => 2
            [2] => 2
        )

     etc

因此您可以直接使用$m[1]['type']