智能地在PHP中解析用户搜索词

时间:2010-10-05 14:17:51

标签: php search-engine text-parsing

我正在为我的PHP网站创建搜索服务,我想知道其他人是如何根据引号(以及将来可能的其他符号)智能解析搜索术语的。

换句话说,搜索词螺丝刀锤可能产生一系列['螺丝刀','锤子'],但“flathead screedriver”锤可能会产生[ '平头螺丝刀','锤子']。

我知道我可以在一个草率的循环中实现这一点,但我确信PHP内置了一些东西来处理它。

2 个答案:

答案 0 :(得分:1)

尝试使用preg_split

类似的东西:

/* $search_term:
*  "flathead screwdriver" hammer -nails
*/

$terms = preg_split("/[\s]*\\\"([^\\\"]+)\\\"[\s]*|[\s]+/", $search_term);

/* $terms = array(
*      0    =>    "flathead screwdriver"
*      1    =>    "hammer"
*      2    =>    "-nails"
*/

$exclude = array();

foreach($terms as $term){
    if(strpos($term, '-') == 0)
        array_push($exclude, substr($term, 1));
}

/* $exclude = array(
*      0    =>    "nails"
*/

我唯一没有包含的是从$ terms数组中删除“nail”。我会把这作为读者的练习=)

答案 1 :(得分:0)

我最终使用 strtok 按照此Previous Post