afan
发表于 2022-8-29 16:44:37
chishingchan 发表于 2022-8-29 14:46
点按钮之后,上下框内容相同!希望你优化一下代码
太简单的工具没什么用
chishingchan
发表于 2022-8-30 16:59:19
afan 发表于 2022-8-29 16:44
太简单的工具没什么用
Func _SID()
Local $wshNetwork = ObjCreate("WScript.Network")
Local $objWMIService = ObjGet("winmgmts:\\.\root\cimv2")
Local $colItems = $objWMIService.ExecQuery("Select * from Win32_Account")
Local $objItem
For $objItem In $colItems
If $objItem.Name = $wshNetwork.UserName Then
Return $objItem.SID
EndIf
Next
EndFunca大,上面这段代码是获取 SID 的函数,这个 SID 的注册表值每台计算机都不一样!例如:
。。。
。。。
使用正则表达式
1、如何获取这个 SID ? (S-1-5-21-776561741-583907252-1801674531-500)
2、如何转换 HKEY_USERS\S-1-5-21-776561741-583907252-1801674531-500 为 HKEY_CURRENT_USER
afan
发表于 2022-8-30 17:15:27
Local $sSource = _
'。。。' & @CRLF & _
'' & @CRLF & _
'。。。'
Local $aSRE = StringRegExp($sSource, '(?i)\\([^\\]+)\\Software\\7-Zip\]', 1)
MsgBox(0, '', $aSRE)
Local $sSource = _
'。。。' & @CRLF & _
'' & @CRLF & _
'。。。'
Local $sSRERe = StringRegExpReplace($sSource, '(?mi)\h*\+(?=\\Software\\7-Zip\])', '[HKEY_CURRENT_USER')
MsgBox(0, '替换结果', $sSRERe)
chishingchan
发表于 2022-8-30 20:04:54
afan 发表于 2022-8-30 17:15
a大,这个要通用的!不能针对 ,正则表达式里不应该有 \Software\7-Zip 等字眼。
chishingchan
发表于 2022-8-30 20:07:42
。。。 表示还有其他注册表内容
afan
发表于 2022-8-30 20:11:23
chishingchan 发表于 2022-8-30 20:04
a大,这个要通用的!不能针对
你的源字符串是什么?。。。。我当然知道是还有其它内容,但不重要,只代表“还有其它内容行”
说实话,你的问题恐怕也只有我看得懂,没看到没其他人回吗?如果我都没……
chishingchan
发表于 2022-8-30 20:46:07
afan 发表于 2022-8-30 20:11
你的源字符串是什么?。。。。我当然知道是还有其它内容,但不重要,只代表“还有其它内容行”
说实话, ...
Windows Registry Editor Version 5.00
; 由 Total Uninstall 产生
"Path"="C:\\Program Files\\7-Zip\\"
"Path32"="C:\\Program Files\\7-Zip\\"
@="{23170F69-40C1-278A-1000-000100020000}"
@="7-Zip Shell Extension"
@="C:\\Program Files\\7-Zip\\7-zip.dll"
"ThreadingModel"="Apartment"
@="{23170F69-40C1-278A-1000-000100020000}"
@="{23170F69-40C1-278A-1000-000100020000}"
@="{23170F69-40C1-278A-1000-000100020000}"
@="{23170F69-40C1-278A-1000-000100020000}"
@="C:\\Program Files\\7-Zip\\7zFM.exe"
"Path"="C:\\Program Files\\7-Zip\\"
"{23170F69-40C1-278A-1000-000100020000}"="7-Zip Shell Extension"
"Path"="C:\\Program Files\\7-Zip\\"
"Path32"="C:\\Program Files\\7-Zip\\"
没办法!正则表达式这方面你就是老大!
chishingchan
发表于 2022-8-30 20:47:50
afan 发表于 2022-8-30 20:11
你的源字符串是什么?。。。。我当然知道是还有其它内容,但不重要,只代表“还有其它内容行”
说实话, ...
我的问题就是写 reg2inf 作准备的!那本《精通》也不知道我要看到猴年马月才能写出来!
chishingchan
发表于 2022-8-30 20:48:45
本帖最后由 chishingchan 于 2022-8-30 20:51 编辑
这个注册表也只是个例子而已!没有针对性的,要通用。
如果使用普通字符串截取也是可以,就是追求完美而已。
afan
发表于 2022-8-30 21:05:26
chishingchan 发表于 2022-8-30 20:48
这个注册表也只是个例子而已!没有针对性的,要通用。
如果使用普通字符串截取也是可以,就是追求完美而 ...
Local $sSource = _
'' & @CRLF & _
'"{23170F69-40C1-278A-1000-000100020000}"="7-Zip Shell Extension"' & @CRLF & @CRLF & _
'' & @CRLF & _
'"Path"="C:\\Program Files\\7-Zip\"' & @CRLF & _
'"Path32"="C:\\Program Files\\7-Zip\"'
Local $aSRE = StringRegExp($sSource, '(?mi)^\h*\[HKEY_USERS\\(S-1-5(?:-\d+){5})', 1)
MsgBox(0, '匹配数量: ' & UBound($aSRE), '其中元素为: ' & $aSRE)
Local $sSource = _
'' & @CRLF & _
'"{23170F69-40C1-278A-1000-000100020000}"="7-Zip Shell Extension"' & @CRLF & @CRLF & _
'' & @CRLF & _
'"Path"="C:\\Program Files\\7-Zip\"' & @CRLF & _
'"Path32"="C:\\Program Files\\7-Zip\"'
Local $sSRERe = StringRegExpReplace($sSource, '(?mi)^\h*\[HKEY_USERS\\(S-1-5(?:-\d+){5})', '[HKEY_CURRENT_USER')
MsgBox(0, '替换结果', $sSRERe)
zhanglei1371
发表于 2022-8-31 09:57:38
chishingchan 发表于 2022-8-28 21:21
请a大帮忙完成这个测试正则表达式的小程序,谢谢!
这个AU3专用的正则工具能分享下吗?谢谢
chishingchan
发表于 2022-8-31 20:13:15
zhanglei1371 发表于 2022-8-31 09:57
这个AU3专用的正则工具能分享下吗?谢谢
11# 不是有源码了吗?!
zhanglei1371
发表于 2022-9-1 06:35:37
chishingchan 发表于 2022-8-31 20:13
11# 不是有源码了吗?!
哦,好的,谢谢!
chishingchan
发表于 2022-9-1 17:22:23
本帖最后由 chishingchan 于 2022-9-1 17:33 编辑
afan 发表于 2022-8-30 21:05
应用在这里有点出错!帮忙看看,谢谢!
MsgBox(0, "", _Optimization("E:\Users\Administrator\Desktop\TEST.reg"))
Func _Optimization($sFilePath)
Local $hFileOpen = FileOpen($sFilePath, 512)
If $hFileOpen = -1 Then
Return False
EndIf
Local $sFileRead = FileRead($hFileOpen)
FileClose($hFileOpen)
;删除换行符
$sFileRead = StringReplace($sFileRead, "\" & @CRLF & "", "")
;将 \\ 替换为 \
;$sFileRead = StringReplace($sFileRead, "\\", "\")
;删除空行
$sFileRead =StringRegExpReplace($sFileRead, '\R+\h*(?=\R)', '')
;删除[]下没有数据的行,忽略以 [- 开头的行
$sFileRead = StringRegExpReplace($sFileRead, '(?mi)(?:^\h*\[h\V+\R+)+(?=\h*\[)', '')
;删除以 ; 开头的注释行
$sFileRead = StringRegExpReplace($sFileRead, '(?m)^\h*;\V*\R*', '')
;将 [HKEY_USERS\SID 转换为 [HKEY_CURRENT_USER
;Local $sFileRead = StringRegExpReplace($sFileRead, '(?mi)^\h*\[HKEY_USERS\\(S-1-5(?:-\d+){5})', '[HKEY_CURRENT_USER')
Return $sFileRead
EndFunc
chishingchan
发表于 2022-9-1 17:28:56
将错误的那一行 (SID) 注释掉,才有画面: