(编程语言:PHP v5.3)
我正在这个网站上工作,我使用谷歌和bing搜索API在特定网站上搜索。
项目:
用户可以从下拉列表中选择要搜索的网站。我们在这个网站上有一个管理面板。如果管理员想要在下拉列表中添加新网站,他必须从网站提供两个示例网址,如下所示。
Form Image http://s14.postimage.org/gcvjvp5qp/Form1.png
在提交表单时,代码通过输入生成一个正则表达式,我们稍后将其用于模式匹配。正则表达式存储在数据库中供以后使用。
访问用户以其他形式从下拉列表中选择一个网站。然后,他在文本框中输入搜索“查询”。我们使用搜索API(如上所述)将结果作为JSON获取,其中我们使用以下查询语法作为搜索字符串:
“网站:网站查询”
(我们将“网站”替换为用户选择进行搜索的网站,并将“查询”替换为用户的搜索查询)。
问题
现在我们要做的就是获得网址的最佳匹配。进行模式匹配的原因是有时候搜索结果中存在不需要的链接。例如,假设我在网站“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 OS的服务器时,preg_match_all()不会返回相同参数的任何结果吗?我似乎无法理解为什么会这样。任何人都知道为什么会这样?
我过去几周一直在研究网络技术,所以我不知道我是否有比正则表达更好的选择。如果你能帮助我或指导我找到能解决问题的资源,我将非常感激。
答案 0 :(得分:1)
关于问题1: 我无法完全掌握你想要完成的任务,所以我不能给出任何有效的意见。
关于问题2: 如果两个服务器都运行相同版本的PHP,则使用的正则表达式库应该是相同的。但是,您可以通过创建一个模拟静态文件或字符串来对正则表达式进行测试并查看结果是否相同来测试它。
由于您从搜索引擎获取结果然后解析它们,因此数据检索可能不一样。 Google / Bing会更改有关您使用的操作系统的部分数据,这可能会改变preg结果。