preg_split () строка тегов, разделенных запятыми, двойными кавычками или пробелами - PullRequest
2 голосов
/ 28 декабря 2011

Я пытаюсь preg_split() строка тегов, разделенных запятыми, двойными кавычками или пробелами.

Это код, который у меня есть. Идея состоит в том, чтобы максимально упростить для пользователя ввод тегов без использования javascript-решения (к которому я могу обратиться позже).

$tagfield = 'Tag Tag2, Tag3 "Tag" "A Tag"';

$tags = preg_split('/[^(.)^a-zA-Z0-9]+/', $tagfield, NULL, PREG_SPLIT_NO_EMPTY);

Вывод, который я получаю:

array (
    0 => 'Tag',
    1 => 'Tag2',
    2 => 'Tag3',
    3 => 'Tag',
    4 => 'A',
    5 => 'Tag',
)

Мой желаемый результат будет:

array (
    0 => 'Tag',
    1 => 'Tag2',
    2 => 'Tag3',
    3 => 'Tag',
    4 => 'A Tag',
)

Я не совсем уверен, как мне взять тег из двух слов.

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Почему не preg_match_all?

preg_match_all('/([a-zA-Z0-9]+)|(?:"([a-zA-Z0-9 ]+)")/i', 'Tag Tag2, Tag3 "Tag" "A Tag"', $result);

Edit:

Я принимаю нелегкую часть решения, однако оно не возвращает двойные кавычки. Вот код, который я упоминал ранее. Пожалуйста, вставьте более элегантный, который вы найдете:)

<?php
preg_match_all('/([a-zA-Z0-9]+)|(?:"([a-zA-Z0-9 ]+)")/i', 'Tag Tag2, Tag3 "Tag" "A Tag"', $result);
$result=array_filter(array_map('array_filter', $result));
print_r(array_merge($result[1], $result[2]));
?>

Выход:

Array
(
    [0] => Tag
    [1] => Tag2
    [2] => Tag3
    [3] => Tag
    [4] => A Tag
)
0 голосов
/ 28 декабря 2011

с учетом места в вашем preg /[^^(.)^a-zA-Z0-9/s]+/ косая черта s

...