保存在数据库贴子数据表中的相关贴子标题以及内容的数据,是经过了HTMLEncode方法处理过的数据,而且数据中包含了大量的UBB标签,在显示贴子之前,应该将那些UBB标签作适当转换,以使用户浏览器能对其进行正确解释。
比如,对于“备注:中国载人航空火箭于2003年10月15日成功升空”,系统应该将其转换成“<I>备注:中国载人航空火箭于2003年10月15日成功升空</I>”。对贴子内容中超文本信息的正确转换我们用到了VBScript里的正则表达式对象RegExp。
RegExp提供简单的正则表达式支持功能,它包括一系列的属性和方法,用于从一段文本中进行正则表达式模式匹配,找出或用一段文字替代与之相匹配的文本。
在VBScript对象包含三个属性以及支持三个方法,下面分别说明如下:
I、Global属性
设置或返回一个 Boolean 值,该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。使用语法:object.Global [= True | False ],object 参数总是 RegExp 对象。如果搜索应用于整个字符串,Global 属性的值为 True,否则其值为 False。默认的设置为 True。
II、IgnoreCase属性
设置或返回一个Boolean值,指明模式搜索是否区分大小写。使用语法:object.IgnoreCase [= True | False ]。object 参数总是一个 RegExp 对象。如果搜索是区分大小写的,则 IgnoreCase 属性为 False;否则为 True。缺省值为 True。
III、Pattern属性
这是正则表达式对象最重要的一个属性,设置或返回被搜索的正则表达式模式。使用语法:object.Pattern [= "searchstring"]。正则表达式对象将根据其正则表达式进行相应的模式匹配。
VI、Replace方法
替换在正则表达式查找中找到的文本。使用语法为:object.Replace(string1, string2)。Replace 方法的语法包含以下几个部分:object是必需,总是一个 RegExp 对象的名称;string1是必需的,string1 是将要进行文本替换的字符串;string2是必需的,string2 是替换文本字符串。被替换的文本的实际模式是通过 RegExp 对象的 Pattern 属性设置的。Replace 方法返回 string1 的副本,其中的 RegExp.Pattern 文本已经被替换为 string2。如果没有找到匹配的文本,将返回原来的 string1 的副本。
V、Execute方法
对指定的字符串执行正则表达式搜索。使用语法为:object.Execute(string)。Execute 方法的语法包括以下几个部分:object是必需的,总是一个 RegExp 对象的名称;string也是必需的,要在其上执行正则表达式的文本字符串。正则表达式搜索的设计模式是通过 RegExp 对象的 Pattern 来设置的。Execute 方法返回一个 Matches 集合,其中包含了在 string 中找到的每一个匹配的 Match 对象。如果未找到匹配,Execute 将返回空的 Matches 集合。
VI、Test方法
对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。使用语法为:object.Test(string)。Execute 方法的语法包括以下几个部分:object 必需的,总是一个 RegExp 对象的名称;string 必需的,要执行正则表达式搜索的文本字符串。正则表达式搜索的实际模式是通过RegExp对象的Pattern属性来设置的。RegExp.Global属性对Test方法没有影响。如果找到了匹配的模式,Test方法返回True;否则返回False。
比如,我们要在将一段文本中所有fox或Fox字符串替换成cat,其示例代码如下:
Dim regEx, str1 ' 建立变量。
str1 = "The quick brown fox jumped over the lazy dog."
Set regEx = New RegExp ' 建立正则表达式。
regEx.Pattern = "fox" ' 设置模式。
regEx.IgnoreCase = True ' 设置是否区分大小写。
ReplaceTest = regEx.Replace(str1, replStr) ' 作替换。
在本系统中,假设Body变量为用户保存的贴子内容,其中包含有UBB标签文本,我们要将其转换成用户浏览器可以识别的格式,比如,飞行文字的UBB代码文本为“[fly]轻舞飞扬[/fly]”,其转换示例代码如下:
dim re
Set re=new RegExp
re.IgnoreCase =True
re.Global=True
re.Pattern="\[fly\](.[^\[]*]\[\/fly\]"
body=re.Replace(body,"<marquee width=90% behavior=alternate scrollamount=3>$1</marquee>")
我们可以照此方法,实现对另外的UBB标签的正确转换,转换的关键是构造出正确的正则表达式。在本系统中,系统支持的所有UBB标签转换正则表达式全部包括在ubb.asp文件中的code_jk函数中。