2

我正在尝试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',
)

我不太确定我应该如何获取两个单词的标签。

4

2 回答 2

1

为什么不是 preg_match_all?

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

编辑:

我接受解决方案中不雅的部分,但它不返回双引号。这是我之前提到的代码。请粘贴您发现的更优雅的那个:)

<?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
)
于 2011-12-28T04:50:18.670 回答
0

在你的 preg 中留出空间 /[^(.)^a-zA-Z0-9/s]+/ slash s

于 2011-12-28T04:25:07.337 回答