au3的正则匹配支持submatches吗?(决定采用自定义函数的方式) - 【已解决】
本帖最后由 kevinch 于 2011-4-17 13:05 编辑在vbs正则里有submatches用法,对于无法单独提取的字符串可以提取一段然后再提取其子段,不知道au3是否也可以这样使用,能给个小例子吗?{:face (396):} 本帖最后由 mozha 于 2011-4-16 14:09 编辑
FileReadLine$file = FileOpen("test.txt", 0)
; 检查打开的文件是否可读
If $file = -1 Then
MsgBox(0, "错误", "不能打开文件.")
Exit
EndIf
; 每次读取一行文本,直到文件结束.
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
MsgBox(0, "读取的行:", $line)
Wend
FileClose($file)
回复 1# kevinch
给段字符串看看,不是很懂你的意思,我暂时没遇到不可正则提取的例子 比如:25个人每人60块,50个人每人70块如果这种在vbs正则里可以直接用"(\d+).*?(\d+)"匹配,并用submatches(0)匹配提取出第一个数字,submatches(1)匹配提取出第二个数字,从而实现计算功能,不知au3能否类似这样实现? 通配你需要的数字,得到的数组不就是你要的?比如提取70跟60,可以(\d+)块 这样得到的数组不是你要计算的? #include <array.au3>
$a='25个人每人60块,50个人每人70块'
$b=StringRegExp($a,'(\d+)块',3)
_ArrayDisplay($b)
回复 5# love5173
主要是这个功能不错,不知道au3支持这个功能不 这个是捕获组 请参考相关的函数 本帖最后由 lixiaolong 于 2011-4-16 20:39 编辑
回复 4# kevinch
写个用户定义函数不行吗?
$str = '25个人每人60块,50个人每人70块'
$a = _StringRegExp_SubMatches($str, '(\d+).*?(\d+)', 0)
MsgBox(0, '', $a)
Func _StringRegExp_SubMatches($string, $regex, $num)
$out = StringRegExp($string, $regex, 3)
Return $out[$num]
EndFunc ;==>_StringRegExp_SubMatches 看看是这效果不;Perl样式
#include <Array.au3>
Local $sText = '25个人每人60块,50个人每人70块'
Local $asResult = StringRegExp($sText, '(\d+).*?(\d+)', 4)
If IsArray($asResult) Then
Local $iCount = UBound($asResult, 1)
For $i = 0 To $iCount - 1 Step 1
_ArrayDisplay($asResult, "第 " & $i+1 &" 条结果:")
Next
Else
Local $iCount = 0
EndIf
$sTips = "发现 " & $iCount & " 条结果:"
For $i = 0 To $iCount - 1 Step 1
$aTmp = $asResult[$i]
$sTips &= @CRLF & $i + 1 & @TAB & $aTmp & @TAB & "合计 = " & $aTmp * $aTmp & " 元"
Next
MsgBox(4096, "结果", $sTips)
Exit;AutoIt返回样式
#include <Array.au3>
Local $sText = '25个人每人60块,50个人每人70块'
Local $asResult = StringRegExp($sText, '((\d+).*?(\d+))', 3)
If IsArray($asResult) Then
Local $iCount = UBound($asResult, 1) / 3
_ArrayDisplay($asResult, "发现 " & $iCount & " 条结果:")
Else
Local $iCount = 0
EndIf
$sTips = "发现 " & $iCount & " 条结果:"
For $i = 0 To $iCount - 1 Step 1
$sTips &= @CRLF & $i + 1 & @TAB & $asResult & @TAB & "合计 = " & $asResult * $asResult & " 元"
Next
MsgBox(4096, "结果", $sTips)
Exit
页:
[1]