日期:2014-05-20  浏览次数:20687 次

求思路,关于正则表达式的内容。
我有一个 500 字节以下的 byte[]
有一个类 Filter 需要按照要求对 这个字节数组进行匹配(一段相等,一段存在,某个值开头 等要求)。

如果Filter固化,只完成有限的功能,可以用代码强行完成。但我想它能够自由扩展,正则表达式就非常理想。


现在的问题是 对500字节进行Encoding后,字节的内容会发生变化:ASC会截断大于128的数,utf-8会把大于128的数拆成2个字节,这样一些INT类型的值比较就很难操作,Unicode在单字节时,会丢弃最后一个字节。

当前是希望有一种不改变字节内容的编码方式。然后进行正则匹配。
或则有正则表达式的引擎,能直接接收byte[]类型的参数。

但上述两条都没有结果。求其他思路?
------解决方案--------------------
正则没戏,自己写匹配算法吧,或者从网上找找 在 流中查找的算法
------解决方案--------------------
C 语言中正则匹配
 int regcomp (regex_t *compiled, const char *pattern, int cflags)
 int regexec (regex_t *compiled, char *string, size_t nmatch, regmatch_t matchptr [], int eflags)

两个字符串的参数类型是 char*  ,这里的 char* 就应该是字节数组。

但C# 却找不到相关的函数
------解决方案--------------------
C#中Regex.Match()参数均要求是string类型的
------解决方案--------------------
正则表达式都需要是对string类型进行操作的喔
------解决方案--------------------
考虑下BASE64编码
------解决方案--------------------
如果一定要用正则来做也是可以的,前提是首先将数组进行转换
for each b as byte in bytes
  t &=b.tostring("X2")
next 

这样就可以把字节数组转换成: D0F0FFAB....这种字符表示形式,然后再用正则来匹配就可以了