正则问题,如何捕获最靠近限定条件的字串?[已解决]
本帖最后由 蓝袍道士 于 2011-8-21 07:17 编辑;原字串有许多行,现简化如下:
$qfehtml="value=7 type=radio alertpayvalue=9 type=radio paypal.png"
;我写的正则表达式,目的是想提取value=9的数字9,但达不到目的。
$word='paypal';限定关键词是想提取对应的数字。
$pay = StringRegExp($qfehtml, '(?is)value=(\d+)\stype=radio.+?' & $word, 3)
MsgBox(0, '$pay', $pay);结果只有唯一,$pay显示会失败。希望是直接在$pay得到 结果,不需要另外处理。 (?i)(?<=alertpayvalue=)(.*?) type=radio paypal.png
#include <Array.au3>
Local $Str = _
';原字串有许多行,现简化如下:' & @CRLF & _
'$qfehtml="value=7 type=radio alertpayvalue=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)(?<=alertpayvalue=)(.*?) type=radio paypal.png', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($Test), '其中元素为: ' & $Test)
_ArrayDisplay($Test, UBound($Test))
谢谢楼上的指点,但这种方法不太理想,因为要确定(?<=alertpayvalue=),这修养在我的实际应用中不能解决问题。
实际应用中字串是用$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处开始从右向左搜索。这与正则表达的从左向右的原则相反。不知有没有这种问题的解决方法? 回复 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 回复 4# lixiaolong
这不是正解,情况是多样的,应将所有value的值设成未知的,不能用来作判断条件 用jquery吧,很简单 本帖最后由 蓝袍道士 于 2011-8-21 07:15 编辑
;原字串有许多行,现简化如下:
$qfehtml="value=7 type=radio alertpayvalue=9 type=radio paypal.png"
;我写的正则表达式,目的是想提取value=9的数字9,但达不到目的。
$word='paypal';限定关键词是想提取对应的数字。
$pay = StringRegExp($qfehtml, '(?is)value=.+value=(\d+)\stype=radio.+?' & $word, 3)
MsgBox(0, '$pay', $pay);结果只有唯一,$pay显示会失败。希望是直接在$pay得到 结果,不需要另外处理。早上来了灵感,自己解决了。关键就是加“value=.+”
页:
[1]