只写给新手的,各前辈就别来看我搬门弄斧了。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
>"
下面测试一下吧。
你现在应该懂得怎么做了吧。呵呵
具体请参见微软正则表达试
文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




