2

(编程语言: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() 不会为相同的参数返回任何结果?我似乎不明白为什么会这样。任何人都知道为什么会这样?

过去几周我一直在研究网络技术,所以我不知道我是否有比正则表达式更好的选择。如果您能帮助我或指导我找到可以解决我的问题的资源,我将不胜感激。

4

1 回答 1

1

关于问题1:我不太了解您要完成的工作,因此我无法给出任何有效的意见。

关于问题 2:如果两台服务器都运行相同版本的 PHP,则使用的正则表达式库应该相同。但是,您可以通过制作一个模拟静态文件或字符串来测试这个正则表达式并查看结果是否相同。

由于您从搜索引擎获取结果然后对其进行解析,因此数据检索可能不一样。Google/Bing 会更改与您使用的操作系统相关的部分数据,这可能会改变 preg 结果。

于 2012-10-20T22:49:33.483 回答