日期:2014-05-17  浏览次数:20793 次

大家帮忙看看关于RegExp的这代码,哪里错了?
Set   regEx2   =   New   RegExp       '//运行这句页面就始终处在等待localhost状态,经过步步查找,发现这句有问题,不知道如何解决,请大家帮忙看看,谢谢!


代码如下
++++++++++++++++++++++++++++++++++++++++++++++++++++++
  Dim   regEx,   retVal
  Set   regEx   =   New   RegExp
  regEx.Pattern   =patrn  
  regEx.IgnoreCase   =   true  
  regEx.Global   =   True
 
  patrn= " <div   class=g.*> (.*) </div> "
  Set   Matches=   regEx.Execute(pages)         //pages   是抓取到的一段html
 
for   each   pass   in   Matches

Set   regEx2   =   New   RegExp       '//运行这句页面就始终处在等待localhost状态,经过步步查找,发现这句有问题

patrn2= " <a   href= "&chr(34)& "(.*) "&chr(34)& ".*> (.*) </a> <td   class=j> <font   size=-1> ( <a   href=.*> .* </a> <br> ) "

regEx2.Pattern   =   patrn2
regEx2.IgnoreCase   =   True
regEx2.Global   =   True
   
 
i=0
  reDim   myArray(18)

  Set   Matches2=   regEx2.Execute(pass)
sum=Matches2.count

if(sum> 0)   then  

For   Each   Match   in   Matches2
myArray(i)=Match.value
i=i+1
Next
parse_page=myArray   //parse_page   为一个过程名
set   myArray=nothing
set   i=nothing
..................略

------解决方案--------------------
for each pass in Matches

这句的next呢?
------解决方案--------------------
应该是楼上所指出的问题
------解决方案--------------------
Matches 集合示例
正则表达式 Match 对象的集合。

说明
Matches 集合中包含若干独立的 Match 对象,只能使用 RegExp 对象的 Execute 方法来创建之。与独立的 Match 对象属性相同,Matches `集合的一个属性是只读的。

在执行正则表达式时,可能产生零个或多个 Match 对象。每个 Match 对象都提供了与正则表达式匹配的字符串的访问入口、字符串的长度,以及标识匹配位置的索引。

下面的代码将说明如何使用正则表达式查找获得 Matches 集合,以及如何循环遍历集合:

Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches ' 创建变量。
Set regEx = New RegExp ' 创建正则表达式。
regEx.Pattern = patrn ' 设置模式。
regEx.IgnoreCase = True ' 设置是否区分大小写。
regEx.Global = True ' 设置全程匹配。
Set Matches = regEx.Execute(strng) ' 执行搜索。
For Each Match in Matches ' 循环遍历Matches集合。
RetStr = RetStr & "Match found at position "
RetStr = RetStr & Match.FirstIndex & ". Match Value is ' "
RetStr = RetStr & Match.Value & " '. " & vbCRLF
Next
RegExpTest = RetStr
End Function
MsgBox(RegExpTest( "is. ", "IS1 is2 IS3 is4 "))

你的遍历集合里面包含着另一个集合,只能自己逐项检查了
还有可能patrn2= " <a href= "&chr(34)& "(.*) "&chr(34)& ".*> (.*) </a> <td class=j> <font size=-1> ( <a href=.*> .* </a> <br> ) "的匹配模式有问题.*加个?变成非贪婪的匹配
patrn2= " <a href= "&chr(34)& "(.*?) "&chr(34)& ".*?> (.*?) </a> <td class=j> <font size=-1> ( <a href=.*> .*? </a> <br> ) "