正则表达式将字符串与二进制文件中的非字母数字字符匹配

时间:2011-11-27 12:40:33

标签: c# regex

我试图从二进制文件中提取一些信息。它看起来像这样:

AUTHCODE(here goes 3 bytes, that I don't need)part_that_i_need(here goes a NULL byte)

enter image description here

如何匹配字节{11} {00} {38}和{00}之间的字母数字字符qszjlbnkmctkkezgd_qyzkyptqigudilzpkp_qgetefvmigwimrihudk部分。

这是我到目前为止所做的:

            string ReadFileMF;
            using (StreamReader reader = new StreamReader(pathCopy))
            {
                ReadFileMF = reader.ReadToEnd();
            }

            ///match the whole string
            Match passMF = Regex.Match(ReadFileMF, @"(AUTHCODE).+?(www)");
            String passMFs = passMF.Value;

            //convert to array of bytes
            byte[] bpass = StrToByteArray(passMFs);

            //replace the 3 bytes after AUTHCODE with spaces
            bpass[8] = 0x20;
            bpass[9] = 0x20;
            bpass[10] = 0x20;

好的,现在我只想在最后匹配nullbyte。像(AUTHCODE).+?(NULL_BYTE)这样的东西。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

通过字节数据上的一些简单的for循环或Copy()操作,这可能是最简单的。确切的规格太少了。像:

// untested, I could be off-by-1 somewhere
int start = "AUTHCODE".Length + 3;
int end = text.Indexof('\0', start);
string result = text.SubString(start, end-start);

如果您确实需要/需要正则表达式,您必须先将其变为字符串。您唯一安全的赌注似乎是ASCII编码。

 string text = Encoding.ASCII.GetString(data);

然后(未经测试)

 Regex.Match(text, "AUTHCODE.{3}([^\0x00]+)\0x00);