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) 注释掉,才有画面:


页: 1 [2] 3
查看完整版本: 【已解决】注册表键的正则表达式