实现了一个用于正则表达式处理的工具,通过热键 F6 快速获取选定的文本内容,然后在工具界面中进行正则匹配与替换操作,处理后的内容可以复制到剪贴板。
/*
正则文本处理工具v1.0
热键F6
by 城西修改 2021.8.19
功能:
1.发送ctrl+c复制
2.将结果数据传入工具
3.可以在工具中正则处理
4.最后将处理后的文本内容放入剪切板
*/
Clipboard=
Send,{Ctrl down}c{Ctrl up}
Sleep,200
Waitstr:=Clipboard
IfWinExist,正则文本处理工具v1.0
{
GuiControl , ,_FileContent, %Waitstr%
return
}
g_SelectedFile = ;这个值是什么不清楚
Gui, Add, Button, x6 y20 w100 h30 g【打开】, 打开文件(&F)
Gui, Add, Edit, x146 y22 w410 h25 r3 v_search g【正则表达式输入框】, ;-Multi
Gui, Add, Button, x556 y20 w80 h50 g【匹配】, 匹配
Gui, Add, Edit, x686 y22 w300 h25 r3 v_replace g【替换字符输入框】, ;-Multi
Gui, Add, Button, x986 y20 w80 h50 g【替换】, 替换
Gui, Add, Button, x750 y75 w100 h25 g【复制】, 复制结果内容
Gui, Add, Edit, x6 y108 w580 h550 HScroll v_FileContent,%Waitstr%
Gui, Add, Edit, x596 y108 w510 h550 HScroll v_NewContent, 无匹配内容
Gui, Add, Text, x6 y80 w80 h20 , 原始文本
Gui, Add, Text, x596 y80 w80 h20 , 替换后文本
Gui, Add, Checkbox, x986 y75 w150 h20 v_OnlyRepalceMatch, 只替换有匹配的行
Gui, Add, Checkbox, x100 y75 w80 h20 v_MatchByLine, 逐行匹配
Gui, Add, Checkbox, x200 y75 w120 h20 v_MatchAll, 匹配全部>连接符
Gui, Add, Edit, x320 y72 w80 h25 r2 cred v_linkstr,> ;-Multi
Gui, Add, Button, x486 y72 w70 h22 g【重新加载】, Reload(&R)
; Generated using SmartGUI Creator 4.0
Gui, Show, x161 y206 h650 w1114, 正则文本处理工具v1.0
Return
GuiClose:
gui,Destroy
return
【打开】:
FileSelectFile, g_SelectedFile, 3, , 选择需要分析的日志文件,
if g_SelectedFile <>
{
FileRead var_temp, %g_SelectedFile%
GuiControl , , _FileContent, %var_temp%
}
Return
【正则表达式输入框】:
Gosub 【匹配】
Return
【匹配】:
Gui, submit, NoHide
_p子模式=
if (RegExMatch(_search,"<(\d+)>$") > 0)
{
_p子模式:=RegExReplace(_search,"[\s\S]*?<(\d+)>$","$1") ;将末尾的<1234> 数字识别为子模式
_search:=RegExReplace(_search,"<\d+>$")
}
if _MatchAll ;匹配-1次
{
if _search <>
{
MatchBuf =
MatchBuf2 =
if _MatchByLine
{
Loop parse, _FileContent, `n,`r
{
MatchBuf2 =
_zArray :=RegExMatchAll(A_LoopField,_search,-1,_p子模式)
if _zArray
{
for k,v in _zArray
{
if (MatchBuf2 <> "")
MatchBuf2 :=MatchBuf2 . _linkstr . v
else
MatchBuf2 :=v
}
}
MatchBuf .=(MatchBuf<>"") ? "`n" MatchBuf2 : MatchBuf2
}
}
else
{
_zArray :=RegExMatchAll(_FileContent,_search,-1,_p子模式)
if _zArray
{
for k,v in _zArray
{
if (MatchBuf2 <> "")
MatchBuf2 :=MatchBuf2 . _linkstr . v
else
MatchBuf2 :=v
}
}
MatchBuf :=MatchBuf2
}
GuiControl , , _NewContent, %MatchBuf%
}
Else
GuiControl , , _NewContent,
Return
}
else ;匹配1次
{
if _search <>
{
MatchBuf =
MatchBuf2 =
if _MatchByLine
{
Loop parse, _FileContent, `n,`r
{
MatchBuf2 =
_zArray :=RegExMatchAll(A_LoopField,_search,,_p子模式)
if _zArray
{
for k,v in _zArray
{
MatchBuf2 :=v
}
}
MatchBuf .=(MatchBuf<>"") ? "`n" MatchBuf2 : MatchBuf2
}
}
else
{
_zArray :=RegExMatchAll(_FileContent,_search,,_p子模式)
if _zArray
{
for k,v in _zArray
{
MatchBuf2 :=v
}
}
MatchBuf :=MatchBuf2
}
GuiControl , , _NewContent, %MatchBuf%
}
Else
GuiControl , , _NewContent,
Return
}
return
【替换字符输入框】:
Return
【替换】:
Gui, submit, NoHide
if _search <>
{
MatchBuf =
if _MatchByLine
{
Loop parse, _FileContent, `n,`r
{
if ( !_OnlyRepalceMatch || RegExMatch( A_LoopField, _search ) > 0 )
{
var_match := RegExReplace( A_LoopField, _search, _replace )
{
MatchBuf .= var_match "`n"
}
}
}
}
else
{
if ( !_OnlyRepalceMatch || RegExMatch( _FileContent, _search ) > 0 )
{
var_match := RegExReplace( _FileContent, _search, _replace )
{
; msgbox RegExReplace( _FileContent`, %_search%`, %_replace% )`n`n%var_match%
MatchBuf := var_match
}
}
}
GuiControl , , _NewContent, %MatchBuf%
}
Else
GuiControl , , _NewContent,
Return
【重新加载】:
Reload
Return
【复制】:
gui,Submit,NoHide
Clipboard :=_NewContent
ToolTip,复制到剪切板完成!
SetTimer, ffzwjc,-1000
Return
ffzwjc:
ToolTip
return
RegExMatchAll(str, re, max_num:=1, re_num="") {
arr:=[], pos:=0, r:="",nc:=1
if max_num <>-1
{
While (pos:=RegExMatch(str, re, r, pos+StrLen(r)+!StrLen(r))) and (nc<=max_num)
{
arr.Push( r%re_num% )
nc++
}
return, arr.MaxIndex() ? arr : ""
}
While (pos:=RegExMatch(str, re, r, pos+StrLen(r)+!StrLen(r)))
arr.Push( r%re_num% )
return, arr.MaxIndex() ? arr : ""
}
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)