正则表达式正则表达式的帮助;忽略随机数据块
我正在对二进制文件进行正则表达式搜索,并且我刚发现一个问题,每隔一段时间就会使用一个64字节的校验和,这会导致我的搜索出现。我想知道的是;有没有办法忽略这些64字节,而不管它们在我的数据中出现的位置?正则表达式正则表达式的帮助;忽略随机数据块
我的正则表达式是\x18\xC0\x40[\x42\x43][\x00\x01]\x00\x00\x00
我的问题如下图所示;
0230000000FF45198085B918C0404301
FFFFFFFFFFFFFFFFC03CCFFFFFFFFFFF
FFFFFFFFFFFFFFFF3C0CFFFFFFFFFFFF
FFFFFFFFFFFFFFFF0300F0FFFFFFFFFF
FFFFFFFFFFFFFFFF030F0FFFFFFF4700
000000B9000000003C8085B9EDDF0000
在我的例子中,我的正则表达式(粗体所需的值)显然不会提取我的模式匹配。这也可能发生在所需数据的任何位置。
对校验和数据的观察始终是4700,它始终是FF的8个字节,后跟3-4个字节的值,然后是4-5个字节的FF。
任何帮助将不胜感激,谢谢 詹姆斯
你或许应该使用两遍进行搜索。在第一遍中,您删除了所有这些校验和块,该块应该很容易识别,在第二遍中您可以进行实际搜索。
否则,您必须在您的表达式的每个字母后面都有一个校验和块,导致读取很长并且很难读取。
试试这个:
\x18\xC0\x40[\x42\x43][\x00\x01](?:\x00{8}[\x00-\xFF]*?\x47\x00)\x00{3}
更新,这将如果校验工作无处不在。为了便于阅读,我插入了换行符
\x18(?:\x00{8}[\x00-\xFF]*?\x47\x00)
\xC0(?:\x00{8}[\x00-\xFF]*?\x47\x00)
\x40(?:\x00{8}[\x00-\xFF]*?\x47\x00)
[\x42\x43](?:\x00{8}[\x00-\xFF]*?\x47\x00)
[\x00\x01](?:\x00{8}[\x00-\xFF]*?\x47\x00)
\x00(?:\x00{8}[\x00-\xFF]*?\x47\x00)
\x00(?:\x00{8}[\x00-\xFF]*?\x47\x00)
\x00
这工作,谢谢。 问题是;它只会在校验和落在数据中的那一点时才起作用。我需要考虑数据中任何一点发生的校验和。正如延斯所说,我认为我要么有一个非常大的正则表达式,要么在第一次移除校验和。 – James 2010-07-13 07:46:59
嗯,不能得到这个工作。我会继续调整它。使用你的例子需要很长时间才能运行,所以我不认为它可用。 我试图改善校验搜索部分如下(注意,第一部分是8个FF不是8 00) (?:\ XFF {8} [\ x00- \ XFF] {54} \ X47 \ X00) 这可以在grep下运行,并找到所有的校验和,但是当我完成搜索时,我没有任何结果。 – James 2010-07-13 09:02:35
*不匹配东西通常很难用正则表达式;在使用正则表达式的上下文中做否定可能会容易得多。你怎么使用它?从一个程序?用哪种语言写成?来自delphi 7的 – reinierpost 2010-07-12 13:34:13
,载入文件并搜索它。我使用DIregex组件。 – James 2010-07-12 13:38:50