fuldho 发表于 2016-1-15 11:34:43

求正则分割16进制;匹配偶数起始位置特定字符(已解决)

本帖最后由 fuldho 于 2016-1-15 15:01 编辑

怎样匹配偶数起始位置特定字符
如:0B00A0B00A0C00A0C0

偶数起始位置(红色)0A ,不是奇数起始位(蓝色)0A

afan 发表于 2016-1-15 11:50:15

#include <Array.au3>
Local $sSource = '0B00A0B00A0C00A0C0'
;~MsgBox(0, '源字符串', $sSource)
Local $sb = '0A'
Local $aSRE = StringRegExp($sSource, '(?i)^((?:..)+?)(' & $sb & ')', 3)
_ArrayDisplay($aSRE, UBound($aSRE))

fuldho 发表于 2016-1-15 12:28:40

回复 2# afan

感谢afan版主回复
我没说清楚,是以 0A 来分割返回组数。

fuldho 发表于 2016-1-15 12:37:13

回复 2# afan


用记事本打开,文本无分行


用WinHex打开(16进制),可以看到是以 0A 分隔



有没有更好的方法重新给文本分行

haijie1223 发表于 2016-1-15 13:05:00

回复 4# fuldho


    上具体文件,上具体要求,这个似乎用偏移更好解决。

fuldho 发表于 2016-1-15 13:07:42

回复 5# haijie1223


是一个不确定的文件,具体就好办了。

haijie1223 发表于 2016-1-15 13:10:54

回复 6# fuldho


    是不是有关U盘启动或者网络启动文件的,说下要求,你想做什么?

fuldho 发表于 2016-1-15 13:30:05

回复 7# haijie1223


    grldr内置lzma压缩菜单

haijie1223 发表于 2016-1-15 13:35:03

回复 8# fuldho


    直接调用lzma压缩就OK了~按照你的思路的话,是不是下面这样?#include <Array.au3>
Local $sSource = '0B00A0B00A0C00A0C0'
Local $length = StringLen($sSource)
$i = 1
While 1
        $pos = StringMid($sSource, $i, 2)
        $i = $i + 1
        If $i = $length Then ExitLoop
        If $pos = "0A" Then
                If Not Mod($i, 2) Then $sSource = StringReplace($sSource, $i - 1, "//", 2)
        EndIf
WEnd
Local $aSRE = StringSplit($sSource, '//', 1)
_ArrayDisplay($aSRE, UBound($aSRE))

haijie1223 发表于 2016-1-15 13:45:45

回复 8# fuldho


    把//改成@crlf吧

haijie1223 发表于 2016-1-15 14:03:05

回复 8# fuldho


    不用分奇偶数,直接替换:Local $hFile = FileOpen(@ScriptDir & "\menu.txt", 16)
Local $sSource = FileRead($hFile)
FileClose($hFile)
$sSource = StringReplace($sSource, "0A", "0D0A")
$sSource = BinaryToString($sSource)
$hFile = FileOpen(@ScriptDir & "\menu.txt", 2 + 8)
FileWrite($hFile, $sSource)
FileClose($hFile)

haijie1223 发表于 2016-1-15 14:49:49

http://www.autoitx.com/thread-51349-1-1.html

fuldho 发表于 2016-1-15 15:00:08

回复 12# haijie1223

非常感谢你的回复!
页: [1]
查看完整版本: 求正则分割16进制;匹配偶数起始位置特定字符(已解决)