小小盘 发表于 2012-8-1 09:09:09

关于网页正则表达式取数据请教

本帖最后由 小小盘 于 2012-8-1 09:12 编辑

想从论坛批量下载帖子需取" class="t_msgfont">和<br>之间的内容,用正则表达式:" class="t_msgfont">(?s)<br>,不能筛选出,请各位老师指教

haijie1223 发表于 2012-8-1 09:42:48

(?s)(?<=" class="t_msgfont">).*?(?=<br>)

小小盘 发表于 2012-8-1 09:51:50

昨天上午试了一上午,谢谢老师帮忙,

xiehuahere 发表于 2012-8-1 14:48:00

回复 2# haijie1223


    说实话,没看懂 ?<= 和 ?= 的用法。StringRegExp的帮助好像没有。

xiaowo 发表于 2012-8-1 15:16:26


haijie1223 发表于 2012-8-1 09:42 http://www.autoitx.com/images/common/back.gif


    .*的后面加个?请问是代表什么呢

.*?和.+有何不同呢

32714107 发表于 2012-8-1 15:32:41

第N次看到正则表达式这个概念了,感觉很有用,但还是一头雾水,加油啊!

xiehuahere 发表于 2012-8-1 16:07:10

本帖最后由 xiehuahere 于 2012-8-1 16:16 编辑

回复 5# xiaowo


这个我知道,可以告诉你。

.*?
. 匹配任意单字符,默认不包括换行符。但这里前面加了(?s),. 就也可以匹配换行符了。因为考虑到" class="t_msgfont">和<br>之间的内容可能换行,所以这样做是很必要的。

* 重复前一个字符0次或多次。这里的前一个字符就是 . 所匹配的任意单字符。

? (在一个重复字符之后) 查询最小范围匹配代替最大范围。这就是帮助里的原话。意思是前面 .* 匹配的范围不包含前面的" class="t_msgfont">和后面的<br>,就是所谓的最小匹配,匹配出来的字串最短。


.+
就是重复前一个字符至少1次。这里的前一个字符就是 . 所匹配的任意单字符。

简单说,最主要的区别就是 * 和 + 的区别。
.* 匹配的东西可以为空(0次或多次,0次的时候就是空),.+匹配的内容一定非空(至少出现1次)。

haijie1223 发表于 2012-8-1 16:11:21

回复 4# xiehuahere


(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置

haijie1223 发表于 2012-8-1 16:12:37

回复 5# xiaowo


    a.*?b匹配最短的,以a开始,以b结束的字符串

xiehuahere 发表于 2012-8-1 16:15:09

回复 8# haijie1223


    多谢!! 这样看起来很合理。
那个《正则表达式30分钟入门教程》里有,看来au3支持的正则绝不仅是帮助里说的那些。

xiaowo 发表于 2012-8-1 16:16:33

回复 9# haijie1223


    原来如此,受教了

xiaowo 发表于 2012-8-1 16:18:42

回复xiaowo


这个我知道,可以告诉你。

.*?
. 匹配任意单字符,默认不包括换行符。但这里前面加 ...
xiehuahere 发表于 2012-8-1 16:07 http://www.autoitx.com/images/common/back.gif


    我也看了《正则表达式30分钟入门教程》,里面没有提到(?s)和(?i)这些,请问这些是在哪里看到的

xiehuahere 发表于 2012-8-1 16:22:39

回复 12# xiaowo


    这些在autoit帮助文件里有,看看 StringRegExp 函数的帮助说明。

xiaowo 发表于 2012-8-1 16:25:30

回复xiaowo


    这些在autoit帮助文件里有,看看 StringRegExp 函数的帮助说明。
xiehuahere 发表于 2012-8-1 16:22 http://www.autoitx.com/images/common/back.gif


    看到了,谢谢,原来后面有部分中文的呀,我就看前面几个是E文的就没往下翻了……求翻译呀{:face (319):}
页: [1]
查看完整版本: 关于网页正则表达式取数据请教