- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个程序来匹配随机其他数据中出现的所有特定模式的二进制数据(以十六进制工作)。它在文件中的任何位置出现大于 0 的任意次数。这是我用来进行搜索的代码,其中 f 已经以读/写模式打开:
pattern = #pattern goes here
f.seek(0)
bytechain = f.read()
match_iter = re.compile(pattern).finditer(bytechain)
matches = [x.start() for x in match_iter]
这是我尝试匹配的字符串之一的示例:
b'\xD4\x00\x00\x00\x3C\x13\x00\x00\x4D\x0D\x78\x0A\x5C\x00'
又名
b'\xD4\x00\x00\x00<\x13\x00\x00M\x0Dx\x0A\\x00'
其中一些值会发生变化,因此我必须使用点在正则表达式模式中表示它们。
我注意到这个模式不起作用(最后的 2 个点无法匹配,就像模式中的匹配,直到添加这 2 个点然后它无法匹配):
pattern = b'\xD4[\x00]{3}..[\x00]{2}M...[\x5a-\x7f]'
但是当模式更改为这样时,它会按预期匹配:
pattern = b'\xD4[\x00]{3}[\x00-\xff]{2}[\x00]{2}M..[\x00-\xff][\x5a-\x7f]'
基本上,字节 b'\x5C' 与 '.' 不匹配,但它与 '[\x00-\xff]' 匹配!
什么给了?我原以为这些对于这个数据来说是等价的。我不明白这些模式是如何编译的。对正则表达式更有经验的人可以帮助我吗?我不是一名程序员,但理解这一点将帮助我改进这个程序。
提前致谢。
最佳答案
对于字节
也是同样的规则,如果你想匹配包括换行符在内的所有字符,则在使用点时必须使用re.DOTALL
match_iter = re.compile(pattern,flags=re.DOTALL).finditer(bytechain)
运气不好,你用 x0A
代替了最后一个点,即换行符。
re.DOTALL
Make the '.' special character match any character at all, including a newline; without this flag, '.' will match anything except a newline. Corresponds to the inline flag (?s).
关于python - 字节模式的正则表达式匹配给出了不寻常的结果 - '.' 不等于 [\x00-\xff],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53707620/
我是一名优秀的程序员,十分优秀!