网站的模式匹配

时间:2011-07-22 23:21:45

标签: sql-server pattern-matching

我在表格中维护了一个全球网站存储库。

website:
id, name,  url 
1   google http://www.google.com/
2   CNN    http://www.cnn.com/
3   SO     http://www.stackoverflow.com/

我维护一个参考表,它存储用户已存储的网站ID。

userwebsite
userid, websiteid
[attributes of the table]

假设用户有兴趣保存microsoft;在他的收藏中,他进入

  

www.microsoft.com

由于该网站不存在于全局存储库中,因此它首先位于存储库中,然后添加到其集合中。现在这两个表的内容看起来像这样:

website:
id, name,  url 
1   google http://www.google.com/
2   CNN    http://www.cnn.com/
3   SO     http://www.stackoverflow.com/
4   msft   http://www.microsoft.com

userwebsite:
userid, websiteid
1       4

假设用户有兴趣在他的收藏中保存谷歌,并进入

www.google.com

由于网站已经存在于集合中,而不是将网站添加到集合中,因此只会将引用添加到用户集合中。

卡住的地方,

  

www.google.com和http://www.google.com/

在语义上他们指向同一个站点,但是当你尝试匹配它们时,它们是2个不同的字符串。在这种情况下我应该如何匹配字符串?

我想到的一个解决方案是,输入网站首先检查网站集合中是否存在域(可能是PATINDEX在这里做得很好),通过这样做,您将获得具有保存域名的站点列表。然后检查任何结果网站中是否存在路径。这是个好主意吗?

此问题是否存在重要解决方案?还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

在这种情况下,您不需要模式匹配,您真正要求的(继续Matteo评论的内容)是一种验证Web地址并以一致方式存储它们的方法。但是如果你想要一个正则表达式来至少确定地址是否有效,你可以看一下:http://www.shauninman.com/archive/2006/05/08/validating_domain_names

或者使用Javascript to validate it虽然您没有说出您在SQL服务器之外使用的语言。

几乎就是这样,您需要将域名发送到域名服务器才能解析,然后再将其存储到您的表中。最好忽略它们是网址的事实,只是将它们视为字符串。例如,您如何确保在数据库中正确比较人名?第一步通常是确保使用大小写;从那时起,处理可能被省略的中间名/首字母变得更加困难。