; 应留意效率问题,如果函数匹配对象太多的话。函数[约214ms耗时]不如Loop每行[约143ms耗时] text= ( ︹︹ aaa 1111 ︺︺ fdfdf 12312 ︹︹ ccc ddd 333 ︺︺ ) regex := "︹︹\n(.*?)\n︺︺" arr:=RegExMatchAll(text, regex) MsgBox % "返回方式1:`n" arr[1][0] "`n`n返回方式2:`n" arr[2][1] text := "澳” 1.00让半球/一 半球/让0.78" ; regex := "(\S{2})\s*/\s*(\S)" ; 获取/左两个字和右一个字为结果 arr:=RegExMatchAll(text, "(\S)\s*/\s*(\S)") ; 获取/左一个字和右一个字为结果 MsgBox % "结果1:`n" arr[1][0] "`n`n结果2:`n" arr[2][0] str:="第10台156手=【对局结果】'帝国投石机(1.0段)'执黑 时间胜 '恶魔家园(1.0段)'执白" re:="(?<=\')\S*(?=\()" arr:=RegExMatchAll(str, re) MsgBox % arr[1][0] "`n" arr[2][0] ; str := "aaa123===bbb456" ; re := "([ab]+)(\d+)" ; For k,v in arr:=RegExMatchAll(str, re) ; MsgBox % "第 " k " 个匹配的第 2 个子匹配是:" v[2] ;---------------------------------- ; 简单的 RegExMatchAll By FeiYue ;---------------------------------- ; 返回值为所有找到的匹配的二级数组,没找到返回0 ; 第一级是所有找到的匹配 ; 第二级是每个找到的匹配的多个字符串构成的简单数组 ; 数组[0]表示整个匹配的字符串 ; 数组[N]表示第N个子模式匹配的字符串 ;---------------------------------- RegExMatchAll(str, re, pos:=1) { arr:=[], len:=StrLen(str) ; 给正则表达式re添加大欧选项O) re:=RegExMatch(re, "^[\w\s`a]*\)") ? "O" re : "O)" re While pos:=RegExMatch(str, re, Match, pos) { if (len0:=Match.Len(0))<1 { pos++ if (pos>len) Break } else { pos+=len0, arr2:=[] Loop % Floor(Match.Count())+1 arr2[A_Index-1]:=Match[A_Index-1] arr.Push(arr2) } } return arr.Length() ? arr : 0 } /* ; 老版本有 对于re="",就会死循环的Bug RegExMatchAll(str, re) { ; 给正则表达式re添加大欧选项O) re:=RegExMatch(re, "^[\w\s`a]*\)") ? "O" re : "O)" re , arr:=[], pos:=1 While pos:=RegExMatch(str, re, Match, pos) { if Match.Len(0)<1 and (pos++ or 1) Continue pos+=Match.Len(0), arr2:=[] Loop % Floor(Match.Count())+1 arr2[A_Index-1]:=Match.Value(A_Index-1) arr.Push(arr2) } return arr.Length() ? arr : 0 } */
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)