找回密码
 加入
搜索
查看: 2897|回复: 6

[AU3基础] 正则问题,如何捕获最靠近限定条件的字串?[已解决]

  [复制链接]
发表于 2011-8-19 14:18:56 | 显示全部楼层 |阅读模式
本帖最后由 蓝袍道士 于 2011-8-21 07:17 编辑

;原字串有许多行,现简化如下:
$qfehtml="value=7 type=radio alertpay  value=9 type=radio paypal.png"

;我写的正则表达式,目的是想提取value=9的数字9,但达不到目的。
$word='paypal';限定关键词是想提取对应的数字。
$pay = StringRegExp($qfehtml, '(?is)value=(\d+)\stype=radio.+?' & $word, 3)
MsgBox(0, '$pay[0]', $pay[0]);结果只有唯一,$pay[1]显示会失败。希望是直接在$pay[0]得到 结果,不需要另外处理。
发表于 2011-8-19 15:11:31 | 显示全部楼层
(?i)(?<=alertpay  value=)(.*?) type=radio paypal.png


#include <Array.au3>
Local $Str = _
                ';原字串有许多行,现简化如下:' & @CRLF & _
                '$qfehtml="value=7 type=radio alertpay  value=9 type=radio paypal.png"' & @CRLF & @CRLF & _
                ';我写的正则表达式,目的是想提取value=9的数字9,但达不到目的。' & @CRLF & _
                "$word='paypal';限定关键词是想提取对应的数字。" & @CRLF & _
                "$pay = StringRegExp($qfehtml, '(?is)value=(\d+)\stype=radio.+?' & $word, 3)" & @CRLF
MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExp($str, '(?i)(?<=alertpay  value=)(.*?) type=radio paypal.png', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($Test), '其中[0]元素为: ' & $Test[0])
_ArrayDisplay($Test, UBound($Test))

 楼主| 发表于 2011-8-19 17:07:09 | 显示全部楼层
谢谢楼上的指点,但这种方法不太理想,因为要确定(?<=alertpay  value=),这修养在我的实际应用中不能解决问题。
实际应用中字串是用$qfehtml = _IEPropertyGet($oIE, "innerhtml")获取的网页源码。其中要处理的是一段是这样的:
<TR>
<TD width=2><INPUT onclick=mn.withdraw_update(1.05,10,0.05) value=7 type=radio
name=accounttype></TD>
<TD><IMG src="http://www.cashcafe.info/pic/alertpay.png"></TD>
<TD>$1.05</TD>
<TD>10 %</TD></TR>
<TR>
<TD width=2><INPUT onclick=mn.withdraw_update(1.05,10,0.00) value=9 type=radio
name=accounttype></TD>
<TD><IMG src="http://www.cashcafe.info/pic/paypal.png"></TD>
<TD>$1.05</TD>
<TD>10 %</TD></TR>

这有可能是三段或者更多的类似段落,其中的差别主要就是paypal和alertpay这二个地方或者三个以上的地方。其中$1.05也有可能不同。
我的企望是,只有二个关键词 value=和paypal就能提取相应的数字。这就是要求从paypal处开始从右向左搜索。这与正则表达的从左向右的原则相反。不知有没有这种问题的解决方法?
发表于 2011-8-19 19:54:44 | 显示全部楼层
回复 3# 蓝袍道士

Local $Str = _
                '<TR>' & @CRLF & _
                '<TD width=2><INPUT onclick=mn.withdraw_update(1.05,10,0.05) value=7 type=radio ' & @CRLF & _
                'name=accounttype></TD>' & @CRLF & _
                '<TD><IMG src="http://www.cashcafe.info/pic/alertpay.png"></TD>' & @CRLF & _
                '<TD>$1.05</TD>' & @CRLF & _
                '<TD>10 %</TD></TR>' & @CRLF & _
                '<TR>' & @CRLF & _
                '<TD width=2><INPUT onclick=mn.withdraw_update(1.05,10,0.00) value=9 type=radio ' & @CRLF & _
                'name=accounttype></TD>' & @CRLF & _
                '<TD><IMG src="http://www.cashcafe.info/pic/paypal.png"></TD>' & @CRLF & _
                '<TD>$1.05</TD>' & @CRLF & _
                '<TD>10 %</TD></TR>'

Local $Test = StringRegExp($Str, '(?<=value=)\d', 3)

For $i = 0 To UBound($Test) - 1
        If $Test[$i] > 7 And $Test[$i] < 10 Then _
                        MsgBox(0, 'value', $Test[$i])
Next
 楼主| 发表于 2011-8-19 22:55:20 | 显示全部楼层
回复 4# lixiaolong


这不是正解,情况是多样的,应将所有value的值设成未知的,不能用来作判断条件
发表于 2011-8-20 13:50:01 | 显示全部楼层
用jquery吧,很简单
 楼主| 发表于 2011-8-21 07:10:56 | 显示全部楼层
本帖最后由 蓝袍道士 于 2011-8-21 07:15 编辑
;原字串有许多行,现简化如下:
$qfehtml="value=7 type=radio alertpay  value=9 type=radio paypal.png"

;我写的正则表达式,目的是想提取value=9的数字9,但达不到目的。
$word='paypal';限定关键词是想提取对应的数字。
$pay = StringRegExp($qfehtml, '(?is)value=.+value=(\d+)\stype=radio.+?' & $word, 3)
MsgBox(0, '$pay[0]', $pay[0]);结果只有唯一,$pay[1]显示会失败。希望是直接在$pay[0]得到 结果,不需要另外处理。
早上来了灵感,自己解决了。关键就是加“value=.+”
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-13 19:19 , Processed in 0.079176 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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