1

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

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

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

还有其他类型,但它们在这里不相关。

关键字类型可以组合,因此keyword1 "keyword2 keyword3"是有效的,并且会搜索具有“keyword1”和精确组合“keyword2 keyword3”的文章。

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

所以我需要一个函数来分隔关键字,但不分隔引号中的文本。有没有可以做到这一点的功能?如果不是,那么正则表达式是否可行?

4

1 回答 1

5

你可以使用正则表达式:

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

print_r($matches);

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

于 2013-05-31T07:32:08.000 回答