找回密码
 加入
搜索
查看: 7929|回复: 15

[AU3基础] 关于读取网页中的多个指定文本的正则表达式【已解决】

 火.. [复制链接]
发表于 2012-2-21 17:04:34 | 显示全部楼层 |阅读模式
本帖最后由 半翅鸟 于 2012-2-22 15:57 编辑

很抱歉,也很郁闷,搜素了一个下午,学习了一个下午,仍然没有搞定这个问题。
问题:
    我想写个练手程序,能够查询某件衣服货号的库存。写了很小一部分代码,又编辑了一个没用的框架,很郁闷,请高手帮助,尤其是正则,我不是不懂的写,是完全不懂怎么用,看不明白.

#include <INet.au3>
Local $huohao $kucun $saletime $dianji $price $color $size
$s_URL = 'http://www.ysxyfs.com/goods.php?id=2230'
$sText = _INetGetSource($s_URL)
$huohao = StringRegExp($sText, .+?\r\n.+?#FF0000">([^<]+)', 3)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-2-21 17:13:33 | 显示全部楼层
$huohao = StringRegExp($sText, 这里的引号呢.+?\r\n.+?#FF0000">([^<]+)', 3)
发表于 2012-2-21 17:25:43 | 显示全部楼层
认真点行吗?发上来的代码至少自己能够运行吧。
发表于 2012-2-21 17:30:43 | 显示全部楼层
对头 你最起码手动复制一次你想要匹配的字串,然后我们才能帮忙
 楼主| 发表于 2012-2-21 17:37:16 | 显示全部楼层
回复 3# afan


    很抱歉,不是不认真,是水平不行,这是我要写的第一个练手程序,确实运行不了呢,不知道怎么写下去,不好意思
发表于 2012-2-21 17:40:18 | 显示全部楼层
本帖最后由 afan 于 2012-2-21 17:41 编辑

回复 5# 半翅鸟


    问题是你除了头文件,第一行就错了。。。Local $huohao $kucun $saletime ... 声明多个变量 之间的逗号呢
还是认真从帮助文档的第一行看起吧
 楼主| 发表于 2012-2-21 17:48:52 | 显示全部楼层
回复 6# afan


    谢谢,好的
 楼主| 发表于 2012-2-21 17:52:21 | 显示全部楼层
回复 6# afan

版主,能问一下,读取源码中商品货号后面的字符的方法吗?
<form action="javascript:addToCart(2230)" method="post" name="ECS_FORMBUY" id="ECS_FORMBUY" >
                                               
                                                商品货号:ysxy1759D<br />
发表于 2012-2-21 18:01:56 | 显示全部楼层
回复 8# 半翅鸟
#include <Array.au3>
Local $Str = '<form action="javascript:addToCart(2230)" method="post" name="ECS_FORMBUY" id="ECS_FORMBUY" >' & @LF & _
                '                                                ' & @LF & _
                '                                                商品货号:ysxy1759D<br />' & @LF
MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExp($str, '货号:(.+?)<br', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($Test), '其中[0]元素为: ' & $Test[0])
_ArrayDisplay($Test, UBound($Test))

评分

参与人数 1金钱 +10 贡献 +5 收起 理由
半翅鸟 + 10 + 5 谢谢你的帮助

查看全部评分

 楼主| 发表于 2012-2-21 18:11:18 | 显示全部楼层
回复 9# afan


    谢谢,收货很大,给你添麻烦了
发表于 2012-2-21 18:17:23 | 显示全部楼层
回复 10# 半翅鸟


    不麻烦,这是最简单的~
一次提取不出所有需要的可以分步提取,这样也不容易出错,也便于修改。
加油,祝你成功~!
 楼主| 发表于 2012-2-21 18:17:37 | 显示全部楼层
初步查询出结果了
#include <Array.au3>
#include <INet.au3>
$s_URL = 'http://www.ysxyfs.com/goods.php?id=2230'
$sText = _INetGetSource($s_URL)
Local $huohao = StringRegExp($sText, '货号:(.+?)<br', 3)
If Not @Error Then MsgBox(0, '商品货号 ',$huohao[0])
发表于 2012-2-21 20:46:12 | 显示全部楼层
本帖最后由 Ycxw2008 于 2012-2-21 20:49 编辑

回复 12# 半翅鸟
还可以用替换法
后面的那些$1 $2 $3 对应前面用括号括起来的  
用在gui的话就可以把括号改到中文后面
试试效果
#include <Array.au3>
#include <INet.au3>
$s_URL = 'http://www.ysxyfs.com/goods.php?id=2230'
$sText = _INetGetSource($s_URL)
Local $huohao = StringRegExpReplace($sText,'(?s).+(商品货号[^<]+).+(商品库存[^<]+).+?(商品品牌[^<]+).+?(上架时间[^<]+).+(本店价:)<[^>]+>([^<]+).+',"$1"&@CRLF&"$2"&@CRLF&"$3"&@CRLF&"$4"&@CRLF&"$5$6")
If Not @Error Then MsgBox(0, '商品货号 ',$huohao)

评分

参与人数 1金钱 +10 贡献 +5 收起 理由
半翅鸟 + 10 + 5 谢谢你的帮助

查看全部评分

 楼主| 发表于 2012-2-22 16:24:01 | 显示全部楼层
本帖最后由 半翅鸟 于 2012-2-22 17:10 编辑

回复 13# Ycxw2008


    (?s).+(商品货号[^<]+).+(商品库存[^<]+).+?(商品品牌[^<]+).+?(上架时间[^<]+).+(本店价:)<[^>]+>([^<]+).+',"$1"&@CRLF&"$2"&@CRLF&"$3"&@CRLF&"$4"&@CRLF&"$5$6")   

这个正则表达式结合帮助文档,还是没能灵活掌握。
(?s) . 匹配任何包含的换行符. (默认 "." 不匹配换行)
. 匹配除换行符以外的任意字符.
+ 重复前一个字符, 设置或组 1 或更多次. 等价于 {1,}     这个完全不明白什么意思

(?s).+(商品货号[^<]+) 没有看懂,很失败,能再指点一下吗

好像是一个嵌套,匹配包括换行符及其以外的任意字符,再重复前一个字符?

[^ ... ] 匹配任何不在指定範圍內的任意字符.
例如: [^0-9] 匹配任何非数字.
要匹配 (^) 字符本身, 请使用 (\^).      这个始终没看明白

还是没能理解

我下载了一个正则表达式说明,正在看,仍然非常感谢
发表于 2012-2-23 09:59:11 | 显示全部楼层
本帖最后由 Ycxw2008 于 2012-2-23 10:09 编辑

回复 14# 半翅鸟
"(?<=:)(?#在:冒号后面开始匹配到出现为止)([^<]+)"=等于="(?<=:)([^<]+)"

上面这段 配合我上面发的那段 你再仔细理解下吧
我表达能力不太好,已经尽力了哈,剩下的自己加油吧








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +25 收起 理由
afan + 25

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 19:50 , Processed in 0.333989 second(s), 30 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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