半翅鸟 发表于 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)

Ycxw2008 发表于 2012-2-21 17:13:33

$huohao = StringRegExp($sText, 这里的引号呢.+?\r\n.+?#FF0000">([^<]+)', 3)

afan 发表于 2012-2-21 17:25:43

认真点行吗?发上来的代码至少自己能够运行吧。

Ycxw2008 发表于 2012-2-21 17:30:43

对头 你最起码手动复制一次你想要匹配的字串,然后我们才能帮忙

半翅鸟 发表于 2012-2-21 17:37:16

回复 3# afan


    很抱歉,不是不认真,是水平不行,这是我要写的第一个练手程序,确实运行不了呢,不知道怎么写下去,不好意思

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 />

afan 发表于 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), '其中元素为: ' & $Test)
_ArrayDisplay($Test, UBound($Test))

半翅鸟 发表于 2012-2-21 18:11:18

回复 9# afan


    谢谢,收货很大,给你添麻烦了

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)

Ycxw2008 发表于 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)

半翅鸟 发表于 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] 匹配任何非数字.
要匹配 (^) 字符本身, 请使用 (\^).      这个始终没看明白

还是没能理解

我下载了一个正则表达式说明,正在看,仍然非常感谢

Ycxw2008 发表于 2012-2-23 09:59:11

本帖最后由 Ycxw2008 于 2012-2-23 10:09 编辑

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

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








页: [1] 2
查看完整版本: 关于读取网页中的多个指定文本的正则表达式【已解决】