使用正则表达式捕获十六进制数据包

本文关键字:十六进制 数据包 正则表达式 | 更新日期: 2023-09-27 18:17:05

我正试图找出捕获字符串中存在的数据包的最佳方法,该字符串还包含其他不需要的字符。数据包是十六进制的,通常分组成字节,中间有空白。数据包的长度各不相同,分别以"10"answers"10 03"开头和结尾。因此,包含数据包的文本可能看起来像这样:

gibberish 10 01 23 AB CD EF 10 03 gibberish

我可以很容易地获得一个正则表达式来捕获十六进制字节字符串,但是如果不考虑分隔符,多个十六进制数据包可以变成一个,或者在开头或结尾碰巧看起来像十六进制的不需要的字符可以与数据包集中在一起。如何使用正则表达式来解释分隔符?
我可以想到不使用正则表达式的方法,但这似乎不那么有效。

使用正则表达式捕获十六进制数据包

一般来说,开头的乱码指的是内存地址。它是一个连续的字符串,没有任何空白。因此,使用'S+来捕获它。

由于十六进制数据将由10开头和10 03结尾分隔,因此使用它们:

^'S+ (10 (?:[0-9a-f]{2} )+10 03)

regex101的演示。

PS:你必须使用RegexOptions.IgnoreCase标志