(编程语言:PHP v5.3)
我正在这个网站上工作,我使用 google 和 bing 搜索 API 在特定网站上进行搜索。
该项目:
用户可以从下拉列表中选择要搜索的网站。我们在这个网站上有一个管理面板。如果管理员想要将新网站添加到下拉列表中,他必须提供来自该网站的两个示例 URL,如下所示。
在提交表单时,代码会通过输入并生成我们稍后用于模式匹配的正则表达式。正则表达式存储在数据库中供以后使用。
在另一种形式中,访问用户从下拉列表中选择一个网站。然后他在文本框中输入搜索“查询”。我们使用搜索 API(如上所述)以 JSON 格式获取结果,其中我们使用以下查询语法作为搜索字符串:
“site:website query”
(我们将“website”替换为用户选择搜索的网站,并将“query”替换为用户的搜索查询)。
问题
现在我们要做的是得到 url 的最佳匹配。进行模式匹配的原因是有时搜索结果中存在不需要的链接。例如,假设我在网站“www.example.com”上搜索文章名称“abcd”。搜索引擎可能会返回这两个网址:
1) www.example.com/articles/854/abcd
2) www.example.com/search/abcd
第一个网址是我想要的。现在我有两个问题要解决。
1) 我知道,考虑到管理员会定期添加网站,我编写的从示例 URL 中创建正则表达式模式的代码永远不会是完美的。永远不可能有足够的条件来检查从相同代码为不同网站创建模式。有没有更好的方法来做到这一点或正则表达式是我唯一的选择?
2) 我正在运行 Windows 7 操作系统的机器上进行开发。preg_match_all() 在这里返回结果。但是当我将代码移动到运行 Linux 操作系统的服务器时,preg_match_all() 不会为相同的参数返回任何结果?我似乎不明白为什么会这样。任何人都知道为什么会这样?
过去几周我一直在研究网络技术,所以我不知道我是否有比正则表达式更好的选择。如果您能帮助我或指导我找到可以解决我的问题的资源,我将不胜感激。