; 应留意效率问题,如果函数匹配对象太多的话。函数[约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)