求正则分割16进制;匹配偶数起始位置特定字符(已解决)
本帖最后由 fuldho 于 2016-1-15 15:01 编辑怎样匹配偶数起始位置特定字符
如:0B00A0B00A0C00A0C0
偶数起始位置(红色)0A ,不是奇数起始位(蓝色)0A #include <Array.au3>
Local $sSource = '0B00A0B00A0C00A0C0'
;~MsgBox(0, '源字符串', $sSource)
Local $sb = '0A'
Local $aSRE = StringRegExp($sSource, '(?i)^((?:..)+?)(' & $sb & ')', 3)
_ArrayDisplay($aSRE, UBound($aSRE))
回复 2# afan
感谢afan版主回复
我没说清楚,是以 0A 来分割返回组数。 回复 2# afan
用记事本打开,文本无分行
用WinHex打开(16进制),可以看到是以 0A 分隔
有没有更好的方法重新给文本分行 回复 4# fuldho
上具体文件,上具体要求,这个似乎用偏移更好解决。 回复 5# haijie1223
是一个不确定的文件,具体就好办了。 回复 6# fuldho
是不是有关U盘启动或者网络启动文件的,说下要求,你想做什么? 回复 7# haijie1223
grldr内置lzma压缩菜单 回复 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)) 回复 8# fuldho
把//改成@crlf吧 回复 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) http://www.autoitx.com/thread-51349-1-1.html 回复 12# haijie1223
非常感谢你的回复!
页:
[1]