RegEx排除集合,同时将所有字符2分组2

时间:2017-08-24 13:58:22

标签: regex regex-group mutual-exclusion

我想用模式修改二进制文件。我已将文件转换为带有xxd的普通hexdump(来自vim包)。普通文件看起来像这样(只有1行没有尾随LF):

$ xxd -ps file.bin | tr -d '\n' | tee out.txt
3a0a5354...

我想在原始文件中删除所有匹配\x01[^\xFF]*\xFF的模式(开放标记和结束标记以及它们之间的所有内容除了另一个结束标记),但是 { {1}} 不会像这样工作。

示例输入和所需匹配:

sed

我正在考虑这样做:

020202020101010101feeffeefff0000...
        ~~~~~~~~~~~~~~~~~~~~    

现在我尝试匹配所有聊天 2-by-2,同时排除sed 's/regex//g' in.file > out.file 。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这应该可以解决问题:

((..)|01([0-9a-e][0-9a-f]|[0-9a-f][0-9a-e])*ff)*

也就是说,我们匹配十六进制数字对,其中第一个或第二个数字可以是f而不是两个。在周围的环境中,我们还必须一次匹配两个字符,以确保我们的匹配从偶数开始。

显然,您必须添加一些实际上从输出中删除内部组的内容,这是特定于您的正则表达式引擎的。我只是在发布了这个简单的s / won后才意识到。