找回密码
 加入
搜索
查看: 2061|回复: 6

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

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

这个正则表达式该如何写才好,请高手赐教,非常感谢。
发表于 2009-11-26 21:21:58 | 显示全部楼层
可以考虑前一种写法获得的数组取下标2开头的元素。就是说数组元素不是从0开始计数吗,舍掉下标0、1的元素
发表于 2009-11-27 14:22:45 | 显示全部楼层
呵呵。不懂哦
发表于 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[0], '<a href.+tid=\d+.>([^<]+)</a>', 3)
_ArrayDisplay($sR, '匹配到的链接')
发表于 2010-1-18 16:55:11 | 显示全部楼层
我也在整正则!
发表于 2010-1-19 14:13:34 | 显示全部楼层
某个帖子已经有这样的例子了,楼主去看看【此办法可解决大部分网页获取的问题.有时候甚至比正则都好用伐
发表于 2010-1-19 14:14:28 | 显示全部楼层
还有一个【传送门
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-22 13:22 , Processed in 0.098740 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表