在空格上爆炸字符串,但不引用引号中的空格

时间:2013-05-31 07:20:11

标签: php regex filter keyword explode

我正在使用PHP构建过滤系统。我需要优先考虑基于关键字匹配的文本。过滤器必须识别不同类型的关键字。

其中一种类型是普通单词keyword1 keyword2。这将过滤带有'keyword1'和'keyword2'的文本,无论它们是否在文本中连续出现的顺序如何。

另一种类型是单词"keyword1 keyword2"的精确组合。这将优先考虑具有确切组合“keyword1 keyword2”的文章。

还有其他类型,但它们与此无关。

关键字类型可能会合并,因此keyword1 "keyword2 keyword3"有效且会搜索包含“keyword1”和确切组合“keyword2 keyword3”的文章。

对于第一种类型,我可以使用explode(' ', $keywords)来获取数组中的关键字。但是,这会弄乱keyword1 "keyword2 keyword3",因为引号中的文本也会分开。

所以我需要一个分隔关键字的函数,但不会用引号分隔文本。有功能可以做到吗?如果不是,那么正确的方法是什么?

1 个答案:

答案 0 :(得分:5)

您可以使用正则表达式:

$string = 'test1 test2 "test3 test4"';
preg_match_all('/\"[\s\S]+\")|([\S]+)/ism', $string, $matches);

print_r($matches);

或者,您可以尝试使用str_getcsv()