qq123123 发表于 2011-4-16 20:11:06

数据采集,求一正则的写法!

求一正则的写法!
小弟在学习,自己在做一个邮箱数据采集
下面这个正则 能采集到 COM的邮箱,
但是我想连同 CN 的一起采集,我想一次写在一行代码里,应该怎么写!


$array = StringRegExp($sText, '\w+@\w+\.com' , 3)

qq123123 发表于 2011-4-16 20:15:36

在等等论坛高手吧,牛奶会有的,蛋糕也会有的!

lixiaolong 发表于 2011-4-16 20:37:09

回复 1# qq123123

试试这个可以不?
\w+@\w+\.cn|\w+@\w+\.com

easefull 发表于 2011-4-16 20:47:57

本帖最后由 easefull 于 2011-4-16 21:58 编辑

做题#include <Array.au3>
Local $sText    = 'killer@126.com134564d8fd1f' & @CRLF &'34rdfar79df75644 killer@126.com.cn16974641' & @CRLF &'34rdfar79df75644 killer2@126.com.cn16974641'
Local $sRegExp= '(\w+?@\w+?\.com.cn)|(\w+?@\w+?\.com)'
Local $asResult = StringRegExp($sText, $sRegExp, 3)
_ArrayDisplay($asResult)
Exit自改答案:
'(\w+?@\w+?\.com.cn)|(\w+?@\w+?\.com)'
红色部分冗余,'\w+?@\w?\.'重复,应该可以精减,详见后面跟贴的代码.

'(\w+?@\w+?\.com.cn)|(\w+?@\w+?\.com)'
红色部分冗余, \w+?@ 和\w+@匹配是一样的

执行结果异常.执行结果会出现异常——每匹配.com的信箱前,都多匹配出一个空字符.
原因不明,解决方法是去掉支枝前后的捕获 '\w+?@\w+?\.com.cn|\w+?@\w+?\.com'.
注:此问题疑似BUG,详见http://www.autoitx.com/forum.php?mod=viewthread&tid=23813&extra=

qq123123 发表于 2011-4-16 20:49:22

\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

中国提供的这个,可以采集到,但是有错误!

gto250 发表于 2011-4-16 20:53:04

$sText="123@qq.com789@qq.cn555@qq.com"

$array = StringRegExp($sText, '\w+@\w+\.(?:com|cn)' , 3)
For $i=0 To UBound($array)-1
MsgBox(0,"",$array[$i])
Next
页: [1]
查看完整版本: 数据采集,求一正则的写法!