正则表达式正则表达式的帮助;忽略随机数据块

问题描述:

我正在对二进制文件进行正则表达式搜索,并且我刚发现一个问题,每隔一段时间就会使用一个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。

任何帮助将不胜感激,谢谢 詹姆斯

+1

*不匹配东西通常很难用正则表达式;在使用正则表达式的上下文中做否定可能会容易得多。你怎么使用它?从一个程序?用哪种语言写成?来自delphi 7的 – reinierpost 2010-07-12 13:34:13

+0

,载入文件并搜索它。我使用DIregex组件。 – James 2010-07-12 13:38:50

你或许应该使用两遍进行搜索。在第一遍中,您删除了所有这些校验和块,该块应该很容易识别,在第二遍中您可以进行实际搜索。

否则,您必须在您的表达式的每个字母后面都有一个校验和块,导致读取很长并且很难读取。

\x18\xC0\x40[\x42\x43][\x00\x01][^\x00\x00\x00]*\x00\x00\x00 
+0

试过这个,但它不工作....使用电源grep,但没有运气 – James 2010-07-12 13:58:06

+0

您正在使用哪种语言/ RegExpParser? – Erik 2010-07-12 14:37:32

+1

''[^ \ x00 \ x00 \ x00] *' - 你期望做什么? – 2010-07-12 15:31:07

试试这个:

\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 
+0

这工作,谢谢。 问题是;它只会在校验和落在数据中的那一点时才起作用。我需要考虑数据中任何一点发生的校验和。正如延斯所说,我认为我要么有一个非常大的正则表达式,要么在第一次移除校验和。 – James 2010-07-13 07:46:59

+0

嗯,不能得到这个工作。我会继续调整它。使用你的例子需要很长时间才能运行,所以我不认为它可用。 我试图改善校验搜索部分如下(注意,第一部分是8个FF不是8 00) (?:\ XFF {8} [\ x00- \ XFF] {54} \ X47 \ X00) 这可以在grep下运行,并找到所有的校验和,但是当我完成搜索时,我没有任何结果。 – James 2010-07-13 09:02:35