LiYi1987 发表于 2009-11-24 21:23:43

请教一个字符串的正则表达式匹配方法

本帖最后由 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>之后的链接,然而结果却是两种情况,有时只提取了第一个,有时是把标记之后的整个代码做为一项提取了出来(因为这样也符合正则表达式里的规则),但就是没有我想要的结果。

这个正则表达式该如何写才好,请高手赐教,非常感谢。

yigao 发表于 2009-11-26 21:21:58

可以考虑前一种写法获得的数组取下标2开头的元素。就是说数组元素不是从0开始计数吗,舍掉下标0、1的元素

ajian55 发表于 2009-11-27 14:22:45

呵呵。不懂哦

afan 发表于 2009-11-27 14:44:48

我想一句匹配搞不定,得两次~#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, '匹配到的链接')

316428696 发表于 2010-1-18 16:55:11

我也在整正则!

sanmoking 发表于 2010-1-19 14:13:34

某个帖子已经有这样的例子了,楼主去看看【此办法可解决大部分网页获取的问题.有时候甚至比正则都好用伐】

sanmoking 发表于 2010-1-19 14:14:28

还有一个【传送门】
页: [1]
查看完整版本: 请教一个字符串的正则表达式匹配方法