关于读取网页中的多个指定文本的正则表达式【已解决】
本帖最后由 半翅鸟 于 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)
$huohao = StringRegExp($sText, 这里的引号呢.+?\r\n.+?#FF0000">([^<]+)', 3) 认真点行吗?发上来的代码至少自己能够运行吧。 对头 你最起码手动复制一次你想要匹配的字串,然后我们才能帮忙 回复 3# afan
很抱歉,不是不认真,是水平不行,这是我要写的第一个练手程序,确实运行不了呢,不知道怎么写下去,不好意思 本帖最后由 afan 于 2012-2-21 17:41 编辑
回复 5# 半翅鸟
问题是你除了头文件,第一行就错了。。。Local $huohao $kucun $saletime ... 声明多个变量 之间的逗号呢
还是认真从帮助文档的第一行看起吧 回复 6# afan
谢谢,好的 回复 6# afan
版主,能问一下,读取源码中商品货号后面的字符的方法吗?
<form action="javascript:addToCart(2230)" method="post" name="ECS_FORMBUY" id="ECS_FORMBUY" >
商品货号:ysxy1759D<br /> 回复 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)) 回复 9# afan
谢谢,收货很大,给你添麻烦了 回复 10# 半翅鸟
不麻烦,这是最简单的~
一次提取不出所有需要的可以分步提取,这样也不容易出错,也便于修改。
加油,祝你成功~! 初步查询出结果了
#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: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 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 10:09 编辑
回复 14# 半翅鸟
"(?<=:)(?#在:冒号后面开始匹配到出现为止)([^<]+)"=等于="(?<=:)([^<]+)"
上面这段 配合我上面发的那段 你再仔细理解下吧
我表达能力不太好,已经尽力了哈,剩下的自己加油吧
页:
[1]
2