点这里,说点啥?

seo设置的匹配关键字问题

2009年6月15日 16:49 | 分类:懒得分类 | 标签: | 人气:232℃

这个星期手头空闲,开始整理以前做的cms系统,本次主要是做成模块化和seo设置,且先处理后台。

模块化就是把常用的功能分开来(简单的封装),因为之前做东西一直有很好的习惯,所以这一块要做的事情很少,只要把各类文件分到不同文件夹就可以了(之前后台文件是放在一起的,以命名区分,前台文件则以文件夹分开),所有涉及数据库操作的都写成了相应的sub和function放在外部的class中了。此外access数据库还要更改一下数据库的链接路径(这个问题应该有相应的解决方法吧,谁知道,请赐教,leo为了方便,通常用到两个数据库链接文件,针对前台的页面)。

seo设置是davis特定提出要做的一项改进,简单讲一个是各个页面的(meta)信息的配置和关键字的堆砌,这些我做了一个关键字的列表,关键字由用户自己添加修改等,然后针对每个页面做相应的meta设置和关键字堆砌设置,有点笨,设置页面也有点长,但似乎能解决问题,leo考虑过更好的排版和用户体验,因时间要求放弃了。下面稍微有点难度的就是文章页面中的关键字替换。就是每篇文章,或者是每个长文本都要进行关键字的匹配与链接的附加。

这部分就简单的方法就用replace,简单快捷,但问题来了,如果某段文字已经有链接了,那么这段文字中的关键字就不能再加上链接。于是,利用正则来处理。

这里用到了正则中的匹配不包含的概念,假设关键字是keyList(i,1)(实际应用中,leo用数组存储的关键字列表),目标文本是str(asp):

  1. set re=new regExp
  2. re.Global = True
  3. re.IgnoreCase = True
  4. re.MultiLine = True
  5. re.pattern =keyList(i,1)&"(?![^<]*<\/a>)"
  6. linkstr="<a href="""&keyList(i,2)&""" target=""_blank"">"&keyList(i,1)&"</a>"
  7. str=re.replace(str,linkstr)

ok,(?![^<]*<\/a>)就是匹配关键字后面不包含”<\/a>“标签,这样也排除了不在a标签内的问题。这个问题解决了,但马上又有新的问题出来了,如果在str的这个文本中,某个关键字处于a标签的title或者href中(因为有英文的关键字,不排除正好匹配到链接的Url中),所以需要对这个关键字进行更多的处理。

于是向前,匹配不包含”<\a",测试一下,貌似解决了问题。

  1. set re=new regExp
  2. re.Global = True
  3. re.IgnoreCase = True
  4. re.MultiLine = True
  5. re.pattern =(?!<a[^>]*)"&keyList(i,1)&"(?![^<]*<\/a>)"
  6. linkstr="<a href="""&keyList(i,2)&""" target=""_blank"">"&keyList(i,1)&"</a>"
  7. str=re.replace(str,linkstr)

不过,leo做的时候,要更加的复杂,要考虑关键字之间的权重,还要处理关键字链接的修改问题,而且是批量的修改,这些先不在这里讨论。

修正,上面的两个正则替换出现问题,第一个不能匹配链接里面加了html标签的内容,比如这个key。第二个问题是用错了正则,前面的(?!]*)用法错误,应为asp里面貌似不支持(?<!exp),即零宽度负回顾后发断言,不过支持 零宽度负预测先行断言(?!exp),所以更改了一下,目前没有问题,具体还要等测试,测试完贴代码。

如果你喜欢文本,你可以:Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
本文链接:http://www.fangleo.cn/?p=1030

为这篇文章说点什么吧?

您的名字: (*必填)

您的邮箱: (*不会被公布 ,必填))

您的网站: