我正在使用PHP构建过滤系统。我需要优先考虑基于关键字匹配的文本。过滤器必须识别不同类型的关键字。
其中一种类型是普通单词keyword1 keyword2
。这将过滤带有'keyword1'和'keyword2'的文本,无论它们是否在文本中连续出现的顺序如何。
另一种类型是单词"keyword1 keyword2"
的精确组合。这将优先考虑具有确切组合“keyword1 keyword2”的文章。
还有其他类型,但它们与此无关。
关键字类型可能会合并,因此keyword1 "keyword2 keyword3"
有效且会搜索包含“keyword1”和确切组合“keyword2 keyword3”的文章。
对于第一种类型,我可以使用explode(' ', $keywords)
来获取数组中的关键字。但是,这会弄乱keyword1 "keyword2 keyword3"
,因为引号中的文本也会分开。
所以我需要一个分隔关键字的函数,但不会用引号分隔文本。有功能可以做到吗?如果不是,那么正确的方法是什么?
答案 0 :(得分:5)
您可以使用正则表达式:
$string = 'test1 test2 "test3 test4"';
preg_match_all('/\"[\s\S]+\")|([\S]+)/ism', $string, $matches);
print_r($matches);
或者,您可以尝试使用str_getcsv()