我正在为我的PHP网站创建搜索服务,我想知道其他人是如何根据引号(以及将来可能的其他符号)智能解析搜索术语的。
换句话说,搜索词螺丝刀锤可能产生一系列['螺丝刀','锤子'],但“flathead screedriver”锤可能会产生[ '平头螺丝刀','锤子']。
我知道我可以在一个草率的循环中实现这一点,但我确信PHP内置了一些东西来处理它。
答案 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