PHP: preg_match и групповое повторение - PullRequest
0 голосов
/ 26 января 2012

Как я могу получить все совпадающие объекты в группе, используя preg_match (или preg_match_all, может быть)?

Например, у меня есть ^(?:,?\s*(?<key>[a-z]))+$, если я применяю к a, b, c, яполучите это:

object array
    0  : string "a, b, c"
    key: string "c"
    1  : string "c"

Мне нужно в основном получить get a, b и c.Что-то вроде этого (не обязательно):

object array
    0  : string "a, b, c"
    key: object array
        0  : string "a"
        1  : string "b"
        2  : string "c"
    ...

Это возможно?Какое решение лучше?Мне действительно нужно разделить его после матча?

Ответы [ 2 ]

3 голосов
/ 26 января 2012

Разделить его на ,\s*, например:

$array = preg_split("/,\\s*/", "a, b,   c,d,e");
1 голос
/ 26 января 2012

Нет, ты не можешь так вложить это. Однако вы можете создать массив вручную.

$str = 'a, b, c';
preg_match_all("/(\w),?/", $str, $m);

// create array
$a = array(
    $str,
    'key' => $m[1]
);

print_r($a);

Вы можете использовать preg_split, тоже зайдите за эти элементы.

$m = preg_split('/\W+/', $str, PREG_SPLIT_NO_EMPTY);
...