现在需要从外部输入字符串a,在(string)b中匹配。先将a转化为(string)c,然后用regex.match方法匹配:
Regex t = new  regex(c);
Match tt = t.Match(b);
绝大部分时间可以满足需求。但是由于外部输入a无法确定,这次碰到了(0x89 0x50 0x4e 0x47 0x0d 0x0a 0x1a 0x0a),转换为string c后,被regex识别为正则表达式。
由于外部输入不确定性,难道真要每个字符判断然后加转义符,有通用一点的方法吗?
我想C#下时候有基于byte[]的匹配吗?问题较菜,谢谢各位了!

解决方案 »

  1.   

    Regex t = new  regex(Regex.Escape(c)); 
      

  2.   

    动态生成正则表达式时,需要用Regex.Escape对输入字符串进行转义处理Regex t = new Regex(Regex.Escape(c));
      

  3.   

    十分感谢lxcnn的答复。
    实验的时候又发现一个问题,使用
    Regex t = new Regex(Regex.Escape(c));
    确实将c中字符进行转义。
    但是原程序中b也是从byte[]转换过来,转换代码:
    string b = System.Text.Encoding.ASCII.GetString(array);
    但是却将array中0x89转换成0x003f,所以还是没有匹配成功。
    这是怎么回事呢?(0x89在原字符串首位)
    再次感谢lxcnn。
      

  4.   


    其它都转换正常吗?看下你的编码是否正确
    string b = System.Text.Encoding.ASCII.GetString(array);