【发布时间】:2019-02-28 14:50:07
【问题描述】:
我正在研究一个正则表达式来匹配一个十六进制字符串,并且在接近尾声时遇到了一些麻烦。我专门寻找不包含 00 且长度在 2 到 8 个字节之间的 2 个字节组。除了当少于 8 个字节时,它会允许额外的 00 在其中。
https://regex101.com/r/jq3QpP/1/
(?!(00)+)([0-9a-fA-F]{2,8})?(?!(00)+) // This on the below text gives the following matches
C86B0200554E0200C86B02000000000000000000270000008109000000000000EC6A050079750
18881000000410000280100000000000000000001000002010400000000000000000000000000
0000000000000000000000F65FA45900000000FF0000002F0000000000000049000000403C9F5
A000000000000000000000000FFFF330000000000000F06EAE8333536
Match 1
Full match 0-8 `C86B0200`
Group 2. 0-8 `C86B0200`
Match 2
Full match 8-16 `554E0200`
Group 2. 8-16 `554E0200`
Match 3
Full match 16-21 `C86B0`
Group 2. 16-21 `C86B0`
Match 4
Full match 21-21 ``
Match 5
Full match 39-47 `02700000`
Group 2. 39-47 `02700000`
在第 1,2,5 场比赛中有额外的 00,在第 3 场比赛中,由于某种原因错过了 20。如果你知道我错过了什么,请告诉我
【问题讨论】:
-
00是否需要与一个字节对齐,或者它可以在任何地方。即10011111应该不匹配吗? -
它需要与一个字节对齐,我也试过 ([0-9a-fA-F][0-9a-fA-F]){1,4} 但我也有问题
-
数据是来自一个文件的标题信息,其中包含我需要提取的 INT32 数字,但如果这有助于理解我在做什么,这些数字用多个 00 分隔
标签: regex hex binary-search