本帖最后由 love5173 于 2011-5-15 20:58 编辑
回复 10# lluxury
不知道你是怎么测试的,如果我是没测试就发的那种我会说明的
#include <Array.au3>
Local $Str = _
'第一种' & @CRLF & _
'8:43:27 对决:铁棒喇嘛 被:1 <普门杖法>' & @CRLF & _
'9:16:21 对决:麦兜 攻:1 被:1 <血刀刀法>' & @CRLF & _
'10:41:18 对决:蜡笔 被:1 <太极剑法>' & @CRLF & _
'11:2:27 对决:虫虫 攻:1 被:1' & @CRLF & _
'11:41:9 对决:我是非洲 被:1 <冲灵剑法>' & @CRLF & _
'23:45:23 对决:徐绩 攻:1 被:0 <飞星术>' & @CRLF & _
'8:6:6 对决:周青 攻:0 被:1 <驱蛇棍法 >' & @CRLF & _
'18:2:47 对决:橘子弟的pp 被:1 <蛇杖杖法>' & @CRLF & @CRLF & _
'取完第一种数据以后,再取第二种,生成的2个表我会合并一下' & @CRLF & _
'第二种' & @CRLF & _
'0228玄冥二老' & @CRLF & _
'与 玄冥二老 的对决开始!' & @CRLF & _
'小雏 率先发难!使出了入门武功[兰花拂穴手]!' & @CRLF & _
'玄冥二老 损失了 191 点体力~' & @CRLF & _
'玄冥二老 毫不手软!使出必杀[玄冥神掌]!' & @CRLF & _
'小雏 损失了 16 点体力~' & @CRLF & _
'玄冥二老 瞬间消失了。。。' & @CRLF & _
' ' & @CRLF & @CRLF & _
'0228赵志敬' & @CRLF & _
'与 赵志敬 的对决开始!' & @CRLF & _
'小雏 率先发难!使出了入门武功[兰花拂穴手]!' & @CRLF & _
'赵志敬 损失了 197 点体力~' & @CRLF & _
'赵志敬 毫不手软!使出必杀[七星剑法]!' & @CRLF & _
'小雏 损失了 0 点体力~' & @CRLF & _
'赵志敬 瞬间消失了。。。'
MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExp($str, '对决:(\H+).*<([^>]+)|(\S+).+\[([^\]]+)', 3)
;~ If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($Test), '其中[0]元素为: ' & $Test[0])
;~ _ArrayDisplay($Test, UBound($Test))
local $Fin[1][2],$k=1
for $i=0 to UBound($Test)-1 Step 2
if Not $Test[$i]='' then
ReDim $Fin[$k][2]
$Fin[$k-1][0]=$Test[$i]
$Fin[$k-1][1]=$Test[$i+1]
$k+=1
EndIf
Next
_ArrayDisplay($Fin)
至于思路其实跟3M差不多,只是没那么严谨
楼主要的第一种是“对决:”后面的非空字符也就是\H+然后是任意字符一直到“<”出现,再取“>”前面的部分,这个结束
第二种就简单了就是换行后面的非空白字符,因为牵扯到换行也是空白,所以用了\S+,后面的正则就跟第一种大同小异了
因为第一种里面有<>第二种里面有[],所以,不用担心第一种第二种取到相同的字符串。
另外一点就是
“'”这个符号在文本内时,可以不予以匹配,AU3正则会自动无视掉,而恰恰大部分的正则测试工具中需要匹配这个字符,所以当你发现别人给你的正则在测试工具中不好用时,要直接带到程序里测试,这样更保险,特别针对网页提取信息的人说的!
还有就是因为AU3的正则在匹配的时候如果含有捕获组会造成,如果含有选择结构就会第一个捕获组捕捉不到内容就会取空值,而第二个表达式取不到值也没什么影响,造成了有些正则实际无法发挥他正常的作用,比如(?(exp)yes|no) 把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no
这个正则在AU3中如果含有捕获组的表达式中是无法正常起到你要的作用的
测试之前我先告诉你这个正则是跟(?(?=expression)yes | no) 功能一样的,但是AU3是不能识别上面的那个表达式的,下面的就可以。
如果(?(?=expression)yes | no) 可以正常使用的话,3M下面那一段处理空值的循环就可以去掉了!
最后,<>这两个符号,并不需要转意,可以直接在正则中使用,也就是\<是可以直接写<的。
呵呵! |