想法:AutoGui自带Expressive – Regular Expression Tool
对于新手来说,
第一,英语界面;
第二,测试完了还要自己再写函数,体会一下
FoundPos := RegExMatch(Haystack, NeedleRegEx [, UnquotedOutputVar = "", StartingPosition = 1])
不仅是英文的,而且参数名还特长
修改目标如下
粗略汉化就不说了
扩展步骤
添加控件
; "Text" section Gui Font, s9 Bold, Segoe UI Gui Add, Text, hWndhTextHdr x10 y98 w710 h29 +0x200 +E0x200, %A_Space%文本 Gui Add, Text, hWndhMatchCount x612 y104 w100 h20 Right Gui Add, Edit,hHdaima vTdaima x10 y450 w710 h120 Multi ;函数代码 Gui Font
生成函数代码
daima:="正则表达 := """ RegEx """`r`nFoundPos := RegExMatch( 文本 , 正则表达 )`r`n" daima:=daima "正则表达 := """ RegEx """`r`nFoundPos := RegExMatch( 文本 , 正则表达 , 输出变量 , 开始位置 )" GuiControl,, Tdaima, %daima%
感觉自己RegExReplace基本不用,所以没加
匹配数量调整
原版使用RegExReplace,这样1234里找\d\d,只有12、34两个结果,而且英文还有1 Match、2 Matches这种麻烦事
我们直接在搜索过程中计算,这样1234里找\d\d,会有12、23、34三个匹配
StartPos := 1 Count:=0 Loop { FoundPos := RegExMatch(SciText, RegEx, Match, StartPos) If (Match == "") { HighlightAll := False Break } StartPos := FoundPos + 1 Count+=1 Length := StrPut(SubStr(SciText, FoundPos, StrLen(Match)), "UTF-8") - 1 FoundPos := StrPut(SubStr(SciText, 1, FoundPos - 1), "UTF-8") - 1 Highlight(FoundPos, Length) } Until (!HighlightAll) GuiControl,, %hMatchCount%,%Count% 个匹配 ;UpdateCounter(SciText, RegEx)
再进一步
+复制函数代码按钮及热键
+正则提示
+正则收集
+扩展函数代码,处理输出变量
原版及改版: