文章关键字替换带链接需要注意的两个问题
发布时间:2010-02-25 12:18:00
标签:替换,关键字,正则表达式
第一步一般是建立一个关键字替换表 如 id keyword url 等字段
第二步是文章显示时把【文章】内容和【关键字替换表】对应的关键字替换成“<a href="[url字段]" target="_blank">[keyword字段]</a>”
如【关键字替换表】
海河 http://www.zhouhaihe.com/blog/
海河工作室 http://www.zhouhaihe.com/
替换内容: 海河工作室
替换结果为 <a href="http://www.zhouhaihe.com/blog/" target="_blank">海河</a>工作室
这个显然不是我们想得到的结果
解决方法:替换顺序需要调整为,先长后短。即先替换“海河工作室”再替换“海河”
替换结果为 <a href="http://www.zhouhaihe.com/" target="_blank"><a href="http://www.zhouhaihe.com/blog/" target="_blank">海河</a>工作室<a>
这个乱套了!第二次把a标签之间的文字替换掉了。
解决方法:替换时不替换a标签之间的文字,避免重复替换。
现在把我写的代码复制出来供大家参考
调用代码:
文章内容=keywords_link(文章内容)
替换函数:
'关键字
function keywords_link(byval str)
dim rs
'问题1解决办法
set rs=conn.execute("select * from [关键字替换表] order by len(keyword字段) desc")
while not rs.eof
str=p_replace(str,rs("keyword字段"),"<a href="""&rs("url字段")&""" target=""_blank"" >"&rs("keyword字段")&"</a>")
rs.movenext
wend
rs.close
set rs=nothing
keywords_link=str
end function
'问题2解决函数 避免重复替换
function p_replace(byval content,byval asp,byval htm)
dim Matches,objRegExp,strs,i
strs=content
Set objRegExp = New Regexp'设置配置对象
objRegExp.Global = True'设置为全文搜索
objRegExp.IgnoreCase = True
objRegExp.Pattern = "(\<a[^<>]+\>.+?\<\/a\>)|(\<img[^<>]+\>)"'
Set Matches =objRegExp.Execute(strs)'开始执行配置
'替换正则表达式
i=0
Dim MyArray()
For Each Match in Matches
ReDim Preserve MyArray(i)
MyArray(i)=Mid(Match.Value,1,len(Match.Value))
strs=replace(strs,Match.Value,"<"&i&">")
i=i+1
Next
'没有正则时候
if i=0 then
content=replace(content,asp,htm)
p_replace=content
exit function
end if
'特殊字符替换
strs=replace(strs,asp,htm)
'替换回去
for i=0 to ubound(MyArray)
strs=replace(strs,"<"&i&">",MyArray(i))
next
p_replace=strs
end function
0
投稿
猜你喜欢
- hash//从井号 (#) 开始的 URL(锚)host//主机名和当前 URL 的端口号hostname//当前 URL 的主机名href
- eclipse安装Python插件之后,主要是为了方便Python代码就可以再Eclipse进行代码脚本,使用Eclipse开发Python
- global.asa<SCRIPT LANGUAGE="VBScript" RUNAT=&qu
- 这些对文本的操作经常用到, 那我就总结一下。 陆续补充。。。操作:strip_html(cls, text) 去除html标签separat
- 本文实例讲述了js比较日期大小的方法。分享给大家供大家参考。具体如下:function DateDiff(d1,d2){ var resul
- Linux系统下调用动态库(.so) 1、linuxany.c代码如下: #include "stdio.h"
- 昨天同事无意又谈起了这个老话题,美工和设计师(视觉)有什么不同?以文字排版设计为例,列了下面两个图来说明,可能会有一些启发, 第一个图应该算
- start many programsexecfile('C:/Dokumente und Einstellungen/schnei
- SQL Server数据库日志清除的两个方法:方法一一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,
- 一、排序排序查询语法:select * from 表名 order by 列1 asc/desc [,列2 asc/desc,..
- Stream Grpc在我们单次投递的数据量很大的时候,比如传输一个二进制文件的时候,数据包过大,会造成瞬时传输压力。或者接收方接收到数据后
- Python3,开一个线程,间隔1秒把一个递增的数字写入队列,再开一个线程,从队列中取出数字并打印到终端#! /usr/bin/env py
- 一、数据预处理实验数据来自genki4k提取含有完整人脸的图片def init_file(): num = 0&n
- 不了解的同学先“点这里”看看什么是Firebug。简单来说,Firebug是Firefox上用来监视、编辑和调试站点的CSS、HTML、DO
- 前言这期文章我就为大家介绍关于python的艺术美——画图神器在数学中有一种美,叫几何美,我们又称为
- 1、最小二乘也可以拟合二次函数我们都知道用最小二乘拟合线性函数没有问题,那么能不能拟合二次函数甚至更高次的函数呢?答案当然是可以的。下面我们
- 实验结论如果需要在循环结束后获得结果,推荐列表解析;如果不需要结果,直接使用for循环, 列表解析可以备选;除了追求代码优雅和特定规定情境,
- 本期做一个selenium详细实例,会把我在元素定位中遇到的一些阻塞和经验分享给大家。(浏览器为Chrome)(如果只需要最终的完整代码,请
- 本文实例讲述了Python实现针对json中某个关键字段进行排序操作。分享给大家供大家参考,具体如下:示例:json_array = [{&
- 环境配置pip install pyqt5 (安装pyQT5库):pyuic5包含在内pip install pyqt5-tools (安装