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

时间:2010-07-12 13:31:31

标签: regex

我正在对二进制文件进行正则表达式搜索,我刚刚发现了一个问题,每隔一段时间就会使用一个64字节的校验和,这会引发我的搜索。我想知道的是;有没有办法忽略这些64字节,无论它们出现在我的数据中的什么位置?

我的正则表达式是\x18\xC0\x40[\x42\x43][\x00\x01]\x00\x00\x00

我的问题如下图所示;

0230000000FF45198085B918C0404301

FFFFFFFFFFFFFFFFC03CCFFFFFFFFFFF

FFFFFFFFFFFFFFFF3C0CFFFFFFFFFFFF

FFFFFFFFFFFFFFFF0300F0FFFFFFFFFF

FFFFFFFFFFFFFFFF030F0FFFFFFF4700

000000B9000000003C8085B9EDDF0000

在我的例子中,我的正则表达式(以粗体显示的值)显然不会选择我的模式匹配。这也可能发生在所需数据的任何一点。

对校验和数据的观察总是结束4700,它总是8个字节的FF,然后是3-4个字节的值,然后是4-5个字节的FF。

非常感谢任何帮助,谢谢 詹姆斯

3 个答案:

答案 0 :(得分:2)

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

否则,你必须在表达式的每个字母后面允许一个校验和块,导致一个很长很难阅读。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

试试这个:

\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