• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: 小 中 大 | 推荐给好友 上一篇 | 下一篇

教你怎么在输出文本时替换掉所有HTML标记

发布: 2007-6-30 18:56 | 作者: admin | 来源: | 查看: 25次 | 进入软件测试论坛讨论

领测软件测试网

只写给新手的,各前辈就别来看我搬门弄斧了。hehe
经常看见有新手来问类似这样的话题,其实关于正则表达式我也不太懂。
昨天下午看了一下微软的正则表达式,少许理解。
今天也写个函数,只当实践,有误人之处请指点。
下面是一个实例:
原文是这样的:"<a href=""blueidea.com""><strong>test1</strong></a> <b>test2</b> <font color=red>test3</font> test4"

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

关键就在于<[^{><}]*>这个正则表达式,虽然很简单,但我还是我凭我浅浅理解,给大家说一下。
HTML标记是以小于号“<”开始,以大于号“>”,结束的。
所以这个正则表达式中的所有大于小于号都代表HTML标记,不是特殊字符。
“[”“]”方括号表达式中所包含的字符只匹配该括号表达式在正则表达式中
所处位置的一个单字符,我简单的理解为,它是匹配某位置的单个字符。
“^”标记是特殊符号,在方括号里面,后面跟的是列表字符,所以它的意思是
所有不在列表或范围中的字符。按我的理解他就相当于我们程序中的“NOT”
所以方括号中的^{><}的意思就是,这个单字符非大于或非小于号。
里面的大括号去掉其实也一样。大括号也是特殊字符
“*”也是特殊符号 匹配前面的子表达式零次或多次,
总的理解起来就是,在一个以小于号“”开始,并以大于号“”结束的标记,并且里面可以有多个的非大于或非小于号字符。这样也就匹配了HTML标记了。
呵呵,废话一堆

<%
Function RegExpTest(patrn,strng,rewho)
Dim re,Match,Matches
RetStr=strng
Set re = New RegExp //建立正则表达式
re.Pattern = patrn //建立正则表达式模式
re.IgnoreCase = True //是否不区分大小写,你可以关闭,因为HTML标记是不区分大小写的。
re.Global = True //是否全局可用
Set Matches = re.Execute(strng) //执行搜索
For Each Match in Matches //遍历匹配集合
    RetStr=replace(RetStr,match.value,rewho) //找到区配字符,并开始替换
Next
RegExpTest = RetStr
End Function
content="<a href= test.asp >test1</a>test2 <strong>test3</strong> test4" //这是原文
pattern="<[^{><}]*>" //正则表达式模式,这里也可以理解成将要被替换掉的字符
Restr="" //将要替换成什么字符
response.write RegExpTest(pattern,content,restr)
%>

现在就还有一个问题。"<[^><]*>" 既然只匹配在一个以小于号“”开始,
并以大于号“”结束的标记,并且里面可以有多个的非大于或非小于号字符。
那么这样的<a href=<b>>就只被匹配一次了,因为<a ***>里还有HTML标记<b>所
以,不能匹配<a ***>,只能匹配<b>,那这样剩下的就是<a href=>
等于说并不会把所有的HTML都匹配掉。。。
我这里也有一个傻瓜的办法。就是执行RegExpTest函数两次


<%
Function RegExpTest(patrn,strng,rewho)
Dim re,Match,Matches
RetStr=strng
Set re = New RegExp //建立正则表达式
re.Pattern = patrn //建立正则表达式模式
re.IgnoreCase = True //是否不区分大小写可以关闭,因为HTML标记不区分大小写
re.Global = True //是否全局可用
Set Matches = re.Execute(strng) //执行搜索
For Each Match in Matches //遍历匹配集合
    RetStr=replace(RetStr,match.value,rewho) //找到区配字符,并开始替换
Next
RegExpTest = RetStr
End Function
content="<a href=<b>>test<>" //这是原文
pattern="<[^{><}]*>" //正则表达式模式,这里也可以理解成将要被替换掉的字符
Restr="" //将要替换成什么字符
Stest=RegExpTest(pattern,content,restr)
response.write RegExpTest(pattern,STest,restr)
%>


这样是可以,可是要是原文大一点的话一定会影响速度的,高手们是否有更好的办法呀。

另外这个函数还有另外一个用处。相信大家都知道GOOGLE搜索出来的关键字都是加了
红色的了,同样,用这个函数也可以做到的。
比如说我想把"<a href=""blueidea.com""><strong>test1</strong></a> <b>test2</b> <font color=red>test3</font> test4中的es都变成红色,
那这个函数就这样调用。RegExpTest("es",原文,"<font color=red>es</font

>"
下面测试一下吧。

你现在应该懂得怎么做了吧。呵呵
具体请参见微软正则表达试

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:[email protected] 电话:010-51297073

软件测试 | 领测国际 | ISTQB | ISTQB官网 | TMMi | TMMi认证 | 国际软件测试工程师认证 | 领测软件测试网