我正在尝试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',
)
我不太确定我应该如何抓住双字标签。
答案 0 :(得分: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
)
答案 1 :(得分:0)
在你的preg中留出空间/ [^(。)^a- zA-Z0-9 / s] +/ slash s