ASP中利用正则表达式实现论坛UBB代码转换(3)
发布时间:2008-02-29 11:49:00
标签:ubb,正则表达式,论坛,asp
我们主要使用Replace()方法配合相应的模版,就可以方便的实现UBB代码功能了,在这里我们主要用到了两个自己编写的函数,第一个函数ReplaceTest,这个函数实现的功能主要是将“正则表达式”对象进行了封装,提供三个入口参数:
Patrn
这个参数传递的是UBB代码的匹配模版
Str
这个参数传递的是将要以UBB方式处理的字符串,比如文章内容。
ReplStr
这个参数传递的是匹配成的HTML代码语言。
ReplaceTest函数的出口参数是经过模版匹配替换之后的字符串。
ReplaceTest函数代码如下:
Function ReplaceTest(patrn,str,replStr)
Dim regEx, str1 ' 建立变量。
str1=trim(str)
Set regEx = New RegExp ' 建立正则表达式。
regEx.Pattern = patrn ' 设置模式。
regEx.IgnoreCase = true ' 设置是否区分大小写。
ReplaceTest = regEx.Replace(str1, replStr) ' 作替换。
set regEx=nothing ‘销毁正则表达式对象
End Function
我们要编写的第二个函数是:UBB()函数。这个函数实现的功能就是将一段文本进行UBB功能的转换。这个函数仅仅只有一个入口参数:
Str
这个参数传递要被处理的字符串。
UBB函数的出口参数是经过UBB代码处理过后的字符串。
UBB函数的代码如下:(程序中有详细注释信息)
Function UBB(str)
dim i,temp ‘声明变量
i=1
temp=""
do while instr(i,str,"[/"]>=1 ‘如果没有达到字符串的末尾
if trim(temp)="" then
temp=ReplaceTest("(\[i])(\S+)(\[/i])",str,"<i>$2</i>") ‘进行UBB代码的模版匹配与替换
else
temp=ReplaceTest("(\[i])(\S+)(\[/i])",temp,"<i>$2</i>") ‘进行UBB代码的模版匹配与替换
end if
temp=ReplaceTest("(\[b])(\S+)(\[/b])",temp,"<b>$2</b>") ‘进行UBB代码的模版匹配与替换
temp=ReplaceTest("(\[big])(\S+)(\[/big])",temp,"<big>$2</big>") ‘进行UBB代码的模版匹配与替换
temp=ReplaceTest("(\[strike])(\S+)(\[/strike])",temp,"<strike>$2</strike>")‘进行UBB代码的模版匹配与替换
temp=ReplaceTest("(\[sub])(\S+)(\[/sub])",temp,"<sub>$2</sub>")‘进行UBB代码的模版匹配与替换
temp=ReplaceTest("(\[sup])(\S+)(\[/sup])",temp,"<sup>$2</sup>")
temp=ReplaceTest("(\[pre])(\S+)(\[/pre])",temp,"<pre>$2</pre>")
temp=ReplaceTest("(\[u])(\S+)(\[/u])",temp,"<u>$2</u>")
temp=ReplaceTest("(\[small])(\S+)(\[/small])",temp,"<small>$2</small>")
temp=ReplaceTest("(\[h1])(\S+)(\[/h1])",temp,"<h1>$2</h1>")
temp=ReplaceTest("(\[h2])(\S+)(\[/h2])",temp,"<h2>$2</h2>")
temp=ReplaceTest("(\[h3])(\S+)(\[/h3])",temp,"<h3>$2</h3>")
temp=ReplaceTest("(\[h4])(\S+)(\[/h4])",temp,"<h4>$2</h4>")
temp=ReplaceTest("(\[h5])(\S+)(\[/h5])",temp,"<h5>$2</h5>")
temp=ReplaceTest("(\[h6])(\S+)(\[/h6])",temp,"<h6>$2</h6>")
temp=ReplaceTest("(\[red])(\S+)(\[/red])",temp,"<font color=red>$2</font>")
'这里可以增加新的UBB代码的实现模版
temp=ReplaceTest("(\[email])(\S+)(\[/email])",temp,"<a href=""mailto:$2"" target=_top>$2</a>")
temp=ReplaceTest("(\[img])(\S+)(\[/img])",temp,"<img src=""$2"">")
temp=ReplaceTest("(\[url])(\S+)(\[/url])",temp,"<a href=""$2"" target=_top>$2</a>")
temp=ReplaceTest("(\[#(\S+)])(\S+)(\[/#])",temp,"<font color=$1>$3</font>")‘进行UBB代码的模版匹配与替换
i=i+1
loop
if trim(temp)<>"" then
UBB=temp ‘将经过UBB代码过滤后的字符串传出
else
UBB=str ‘将经过UBB代码过滤后的字符串传出
end if
end function
在函数UBB的代码中我们可以看到“$1”,“$2”,“$3”等等,这些字符串就是匹配后的字符串的代词,就如同一些“宏”一样,我们可以使用他们方便代替匹配到的字符串,而不必再使用程序去记住匹配字符串的位置。通过这两个简单的函数调用,我们实现了UBB代码的功能,怎么样,很简单吧。
这样,我们只要在显示文章的时候调用UBB函数,对文章内容进行处理之后,再显示到浏览器上面,就实现了论坛的UBB代码功能。并且,你可以方便的在函数UBB添加需要的UBB代码匹配替换模版,从而可以不断的扩充你的UBB代码的功能。
(以上程序均在WinNT4.0英文版SP5,IIS4.0,IE5.x中运行通过)
0
投稿
猜你喜欢
- 设计网站的同志背景主要有两种:学计算机、学艺术。基本上会写代码的不懂设计,会设计的不懂代码,这个格局似乎到今天还没变。某些学计算机的同学,有
- 内容: ************* 1安装MYSQL后更改了ROOT的密码后用 net startmysql 启动时我就遇到了这样的问题.使
- QQ医生在广大用户心中一直以来都是清爽便捷的一款安全工具,随着QQ医生的不断发展,QQ医生团队一直在思考,怎样能够给QQ医生用户带来性能更优
- 一个js用星投票的例子,不是常见的图片版,当然你如果会点js代码的话应该可以改为更加美观的图片投票,原理都一样。本程序只演示了读取星的个数,
- 一般我们可以使用背景图的方式给图片添加阴影,但对于不固定尺寸的图片如何实现呢?我们可以采取“视觉欺骗 * ”——定义渐变边框来实现运行代码框&
- 由于不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,对C
- master库对于SQLServer来说,是很重要的系统数据库,保存着所有Sqlserver的用户信息、数据库信息等,当数据库崩溃时,mas
- Oracle物理结构故障是指构成数据库的各个物理文件损坏而导致的各种数据库故障。这些故障可能是由于硬件故障造成的,也可能是人为误操作而引起。
- 作者:Henny Swan / co-lead of WaSP ILG译者:JunChen / member of WaSP ILG原文:h
- 在项目开发中,经常出现这样的需求。在新增或修改一个主表数据时,对应的从表也要进行同步,此时我们是怎么操作的了?典型的方法就是对于主表的各数据
- 南京的炎炎夏日也未能挡住书友会朋友们的参与,下午两点半我们正式开始了这个月的话题:“浏览器”。一开始大家大致上说了一些自己认为各浏览器中各自
- 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短
- 索引( Index )是常见的数据库对象,它的设置好坏、使用是否得当,极大地影响数据库应用程序和Database 的性能。虽然有许多资料讲索
- key_buffer_size - 这对MyISAM表来说非常重要。如果只是使用MyISAM表,可以把它设置为可用内存的 30-40%。合理
- PL/SQL是由Oracle公司对标准SQL进行扩展,专用于Oracle数据库中程序设计的专用语言,属第三代过程式程序设计语言。从Oracl
- 1.触发器概述触发器是SQL Server数据库应用中一个重要工具,是一种特殊类型的存储过程,应用非常广泛。一般存储过程主要通过存储过程名而
- 注:本文所说的视觉设计师专指网页视觉设计师。网页设计师与平面设计师都归类为设计师,其实这两个职业是跨行业的,虽然有很多设计师一直在跨行业工作
- 1、信息表新建立一个字段,并用0、1的方法判断信息的状态。 2、新建一个页面,定时刷新,并查询表中是否有字段值为0的记录。 3、当管理员点击
- 阅读上一章:Chapter 13 为文字指定样式Chapter 14 图片替换随着更多设计师与开发者开始使用标准(特别是CSS),每天都会有
- 建立一个数据库表维护规范在一个定期基础而非等到问题出现才实施数据库表的检查是一个好主意。应该考虑到建立一个预防性维护的时间表,以协助自动问题