半翅鸟 发表于 2012-3-1 16:35:14

如果正则表达式匹配不到内容,算错误,还是跳过?

本帖最后由 半翅鸟 于 2012-3-1 17:13 编辑

一个很菜的问题,例如:#include <Array.au3>
#include <INet.au3>
#include<Array.au3>
$s_URL = 'http://www.ysxyfs.com/goods.php?id=2236'
$sText = _INetGetSource($s_URL)
Local $huohao = StringRegExp($sText, '货号:(.+?)<br', 3)
Local $colors = StringRegExp($sText, '(?s)颜色:.+?" />\s+(.+?)\s+</', 3)
Local $size = StringRegExp($sText, '/>\s*(S|M|L|XL|XXL|均码)\s*\[(\d*)\]', 3)
FileWriteLine (@DesktopDir&"\test.txt",$huohao&$colors&$size)If Not @Error Then MsgBox(0, '商品货号 ',$huohao&colors&$size)
问题一:如果其中一条正则表示式匹配不上,例如:货号本身不存在,那么这个程序算错误,还是会继续执行?我自己的尝试是如果匹配不到,程序按下F5没有反映,应该是错误了。
问题二:$size这个变量数组根据帮助文件看不是一个高效的数组,因为混合使用多种数据类型,不过很方便,就是一个不知道如何将匹配的内容输出来!
因为匹配出来的内容可能是2个,4个,8个等,例如:M10 L10 XL10,或S10或均码10,那我如何让他们出来呢?
利用$size&$size的时候,一定是结果是2个的才弹出Msgbox,如果用$size&$size$size&$size,而网页内容只有M10,就会出现错误。
求解,在线期盼,谢谢指教。

经过帖子搜索,找到了第一个问题的答案,如果正则表达式匹配不到,命令继续执行

shqf 发表于 2012-3-1 20:14:58

本帖最后由 shqf 于 2012-3-1 20:27 编辑

用UBound($size)取得数组的大小,再用循环 0 to UBound($size)-1就行了

zch11230 发表于 2012-3-1 20:24:03

本帖最后由 zch11230 于 2012-3-1 20:37 编辑

标志 = 3 或 4 时:
@Error 意思
0 有效数组.
1 数组无效. 没有匹配项目.
2 正则表达式错误, 数组无效. @Extended = 在正则表达式中的错误偏移量.

楼主说的是这个意思吗?

但是楼主有3个变量 我觉得一起检查比较方便
If IsArray($huohao) And IsArray ($colors) And IsArray ($size) Then ConsoleWrite($huohao&""&$colors&""&$size&@CRLF)
页: [1]
查看完整版本: 如果正则表达式匹配不到内容,算错误,还是跳过?