请教ASP 正则高手一个规则的写法,感谢!

xyz98765 2011-04-14 10:18:05
我想写一个通用的正则规则,用于采集新闻时提取想要的内容,这个内容出现的次数不确定,有时候可能不出现,有时候可能出现几十次。

被采集的内容一:新浪的博客,其中这样的代码我想替换
原内容:<img real_src ="http://s1.sinaimg.cn/middle/5919b50et693500716de0" /></A>
通过规则采集提取 http://s1.sinaimg.cn/middle/5919b50et693500716de0


被采集的内容二:
文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容
<div id=yued>
<div class=tit>新闻推荐阅读</div>
<div class=yuebox><!--新闻图片区 -->
<div class=imgcon><a href="#" target=_blank><img border=0 alt="" src="#" width=104 height=90></a><span><a href="#" target=_blank>标题一</a><br><a href="#" target=_blank><strong>标题2</strong></a><br></span>
<div class=clear></div></div><!--图区 结束-->
<div class=testlinh><a href="#" target=_blank>标题3</a></div>
<ul class=testlinhul>
<li><a href="#" target=_blank>标题4</a></li>

<li><a href="#" target=_blank>标题5</a></li>

<li><a href="#" target=_blank>标题6</a></li>

<li><a href="#" target=_blank>标题7</a></li>

<li><a href="#" target=_blank>[标题8]</a><a href="#" target=_blank>标题9</a></li>

<li><a href="#" target=_blank>[标题10]</a><a href="#" target=_blank>标题11</a></li>

<li><a href="#" target=_blank>[标题12]</a><a href="#" target=_blank>标题13?</a></li>
</ul>
</div></div><!--新闻推荐阅读 结束-->
文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容

通过规则采集提取<div id=yued>与<!--新闻推荐阅读 结束-->中间的内容

我定义了一个函数 thtxt,这个函数由html的textarea事先定制,定制的规则:$*$代表不确定的内容,被替换的内容@@@@替换后的内容
针对第一个情况我的thtxt值为src="$*$"@@@@src="$参数1$.jpg”
针对第二个情况我的thtxt值为<div id=yued>$*$<!--新闻推荐阅读 结束-->@@@@Null
我的ASP正则处理如下:
zzz=split(thtxt,"@@@@")
If Instr(zzz(0),"$*$")>0 Then'如果包含$*$,进行特殊替换处理
b1=split(zzz(0),"$*$")
Set Re = New Regexp
Re.IgnoreCase = True
Re.Global = True
' Re.Pattern =b1(0)&".*?"&b1(1)&"" '----这种写法只对第一种情况有效,对第二种情况无效
Re.Pattern = b1(0)&"(.*?)"&b1(1) '----这种写法只对第二种情况有效,对第一种情况无效
Set Matches =Re.Execute(Content)
For Each Match in Matches
b2=Match.Value

If TempStr<>"" then
TempStr=TempStr & "$Array$" & b2
Else
TempStr=b2
End if
Next
c1=split(TempStr,"$Array$")
response.write "匹配到的内容:"&TempStr&"=============================="


end if


请问如何写规则 可以同时用于第一种和第二种情况 ?感谢




...全文
71 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lsf5921 2011-04-14
你说的不是很懂,上面说,提取出url出来,后面貌似你又是把src替换了

只是单单提取出url出来,凭那个html完全可以写成
RegExp.Pattern = "<a src=""([^#:][^""]*"""
Set Matches = RegExp.Execute(HTMLCONTENT)
For Each Matche In Matches
getValue = Matche.SubMatches(0)
Next

你后面又说要替换,并且不能统一正则
但是从你的两个正则形势来看,第二个在实际意义上只比第一个多了个括号,但是这个括号在执行匹配时没任何影响。如果非得出错误,那么就是你第一个的正则中没写好,估计有正则匹配符影响了你的匹配,所以猜测的情况有两种。
第一种,你从teatarea中获取过来的是你执行想使用的正则
第二种,你从textarea中获取过来的是HTML,你并不打算把$*$,@@@@之外的字符中的正则关键字作为正则使用,这种情况你就要对这些字符进行处理了。如果是这种情况下,给你一个函数,去除正则的关键字。

Function getRegExpStr(ByVal str)
Dim arrErr,i
str=tostr(str)
strErr = Array("\","|",".","*","?","+","^","$","{","}","[","]","(",")",vbcr,vblf)
For i=0 To UBound(arrErr)
str = Replace(str, arrErr(i), "\" & arrErr(i))
Next
getRegExpStr = str
End Function

希望对你有用
回复
xyz98765 2011-04-14
取img src的路径这样写的
/:<img real_src =\".*?\" >/

取出过滤部分是这样写的
/<div class=yuebox>[\s\S]+<!--新闻推荐阅读 结束-->/

我想要【.*?】和【[\s\S]+】整合在一起的写法
回复
xyz98765 2011-04-14
感谢楼上的支持 方法可行
我现在还再想匹配
:<img real_src ="http://s1.sinaimg.cn/middle/5919b50et693500716de0" /></A>
红色部分的

应该怎么写呢?
回复
hongmei85 2011-04-14
		<textarea name="kk" id="kk" rows="10" cols="50">文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容
<div id=yued>
<div class=tit>新闻推荐阅读</div>
<div class=yuebox><!--新闻图片区 -->
<div class=imgcon><a href="#" target=_blank><img border=0 alt="" src="#" width=104 height=90></a><span><a href="#" target=_blank>标题一</a><br><a href="#" target=_blank><strong>标题2</strong></a><br></span>
<div class=clear></div></div><!--图区 结束-->
<div class=testlinh><a href="#" target=_blank>标题3</a></div>
<ul class=testlinhul>
<li><a href="#" target=_blank>标题4</a></li>

<li><a href="#" target=_blank>标题5</a></li>

<li><a href="#" target=_blank>标题6</a></li>

<li><a href="#" target=_blank>标题7</a></li>

<li><a href="#" target=_blank>[标题8]</a><a href="#" target=_blank>标题9</a></li>

<li><a href="#" target=_blank>[标题10]</a><a href="#" target=_blank>标题11</a></li>

<li><a href="#" target=_blank>[标题12]</a><a href="#" target=_blank>标题13?</a></li>
</ul>
</div></div><!--新闻推荐阅读 结束-->文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容
</textarea>
<script type="text/javascript">
<!--
var re = /<div class=yuebox>[\s\S]+<!--新闻推荐阅读 结束-->/
var jj = re.exec(document.getElementById("kk").value)
alert(jj[0]);
//-->
</script>
回复
xyz98765 2011-04-14
再简单的就是我想匹配出<div id=yued>不确定的内容<!--新闻推荐阅读 结束--> 之间的蓝色部分
谢谢
回复
xyz98765 2011-04-14
感谢楼上给出的函数,可能是我写的不太明白 我再说一下吧。
===================================================
我想写一个通用的正则式,用于采集时处理采集正文里不想要的内容和需要更换的内容
所以我设置了这样的一个正则式的模型
<div id=yued>$*$<!--新闻推荐阅读 结束-->@@@@Null

$*$代表不想要的内容(同时这个内容也是不确定的)
被替换的内容@@@@替换的内容

目前碰到的情况是这样的:
采集新浪博客里的文章,文章里包含图片。但图片没有扩展名,我想加上扩展名,所以我在ID=thtxt的textarea写了 src="$*$"@@@@src="$参数1$.jpg”
然后提交到采集页面,此页面有一个thtxt的函数接收到了src="$*$"@@@@src="$参数1$.jpg”
进行处理
zzz=split(thtxt,"@@@@")
If Instr(zzz(0),"$*$")>0 Then'如果包含$*$,进行特殊替换处理
b1=split(zzz(0),"$*$")
Set Re = New Regexp
Re.IgnoreCase = True
Re.Global = True
Re.Pattern =b1(0)&".*?"&b1(1)&"" '----这个是正则写法
Set Matches =Re.Execute(Content)
For Each Match in Matches
b2=Match.Value
If TempStr<>"" then
TempStr=TempStr & "$Array$" & b2
Else
TempStr=b2
End if
Next
response.write "匹配到的内容:"&TempStr&"=============================="

测试通过




第二种情况 :
去掉采集文章中的不想要的内容,情况如下:
文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容
<div id=yued>
<div class=tit>新闻推荐阅读</div>
<div class=yuebox><!--新闻图片区 -->
<div class=imgcon><a href="#" target=_blank><img border=0 alt="" src="#" width=104 height=90></a><span><a href="#" target=_blank>标题一</a><br><a href="#" target=_blank><strong>标题2</strong></a><br></span>
<div class=clear></div></div><!--图区 结束-->
<div class=testlinh><a href="#" target=_blank>标题3</a></div>
<ul class=testlinhul>
<li><a href="#" target=_blank>标题4</a></li>

<li><a href="#" target=_blank>标题5</a></li>

<li><a href="#" target=_blank>标题6</a></li>

<li><a href="#" target=_blank>标题7</a></li>

<li><a href="#" target=_blank>[标题8]</a><a href="#" target=_blank>标题9</a></li>

<li><a href="#" target=_blank>[标题10]</a><a href="#" target=_blank>标题11</a></li>

<li><a href="#" target=_blank>[标题12]</a><a href="#" target=_blank>标题13?</a></li>
</ul>
</div></div><!--新闻推荐阅读 结束-->
文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容文章内容
====================
红色部分为要使用正则取出并去掉的部分
我在ID=thtxt的textarea写了 <div id=yued>$*$<!--新闻推荐阅读 结束-->@@@@Null
然后提交到采集页面,此页面有一个thtxt的函数接收到了 <div id=yued>$*$<!--新闻推荐阅读 结束-->@@@@Null进行处理
zzz=split(thtxt,"@@@@")
If Instr(zzz(0),"$*$")>0 Then'如果包含$*$,进行特殊替换处理
b1=split(zzz(0),"$*$")
Set Re = New Regexp
Re.IgnoreCase = True
Re.Global = True
Re.Pattern = b1(0)&"(.*?)"&b1(1)'----这个是正则写法
Set Matches =Re.Execute(Content)
For Each Match in Matches
b2=Match.Value
If TempStr<>"" then
TempStr=TempStr & "$Array$" & b2
Else
TempStr=b2
End if
Next
response.write "匹配到的内容:"&TempStr&"=============================="

测试通过


=======================
、可以看到二个正则Re.Pattern写法不一样(蓝色字),我想写一个通用的,可以同时适合这二种情况的正则,感谢指导!
回复
相关推荐
发帖
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
帖子事件
创建了帖子
2011-04-14 10:18
社区公告
暂无公告