请教一个字符串的正则表达式匹配方法
本帖最后由 LiYi1987 于 2009-11-25 12:53 编辑这个小程序是提取字符串中所有的论坛帖子链接地址,源代码如下<a href='read.php?tid=1'>打开链接</a>
<a href='read.php?tid=2'>打开链接</a>
<b>标记</b>
<a href='read.php?tid=3'>打开链接</a>
<a href='read.php?tid=4'>打开链接</a>
<a href='read.php?tid=5'>打开链接</a>为了让下面的代码更简洁,暂且直接让$STR的值等于以上HTML代码#Include <Array.au3>
$STR
$ARR = StringRegExp($STR, "<a href='read\.php\?tid=\d*'>打开链接</a>", 3)
_ArrayDisplay($ARR)经测试后,_ArrayDisplay()列出了我想要的结果,可是在这里我并不想提取所有的链接地址,我只想提取<b>标记</b>之后的链接地址,正则表达式我这样写
<b>标记</b>.*<a href='read\.php\?tid=\d*'>打开链接</a>
表示要提取<b>标记</b>之后的链接,然而结果却是两种情况,有时只提取了第一个,有时是把标记之后的整个代码做为一项提取了出来(因为这样也符合正则表达式里的规则),但就是没有我想要的结果。
这个正则表达式该如何写才好,请高手赐教,非常感谢。 可以考虑前一种写法获得的数组取下标2开头的元素。就是说数组元素不是从0开始计数吗,舍掉下标0、1的元素 呵呵。不懂哦 我想一句匹配搞不定,得两次~#include <Array.au3>
$Str = _
'<a href=' & "'" & 'read.php?tid=1' & "'" & '>打开链接1</a>' & @CRLF & _
'<a href=' & "'" & 'read.php?tid=2' & "'" & '>打开链接2</a>' & @CRLF & _
'<b>标记</b>' & @CRLF & _
'<a href=' & "'" & 'read.php?tid=3' & "'" & '>打开链接3</a>' & @CRLF & _
'<a href=' & "'" & 'read.php?tid=4' & "'" & '>打开链接4</a>' & @CRLF & _
'<a href=' & "'" & 'read.php?tid=5' & "'" & '>打开链接5</a>' & @CRLF & _
''
MsgBox(0, '网页源码', $Str)
$sR = StringRegExp($Str, '<b>标记</b>\s+((?:.+\s+)+)', 3)
If @error = 0 Then $sR = StringRegExp($sR, '<a href.+tid=\d+.>([^<]+)</a>', 3)
_ArrayDisplay($sR, '匹配到的链接') 我也在整正则! 某个帖子已经有这样的例子了,楼主去看看【此办法可解决大部分网页获取的问题.有时候甚至比正则都好用伐】 还有一个【传送门】
页:
[1]