请参阅以下 34 个字符的 ASCII 字符串。我正在尝试在此字符串上匹配 3 个 MD5 哈希值。
8AC905DD4AB2038E5F7EABEAE792AC41BC
[A-F0-9]{32}
仅匹配前 32 个字符。
这是我的二进制逆向工程项目的一部分。
如何从提到的字符串中获得 3 个不同的匹配项?任何想法都会受到赞赏。
干杯,
最佳答案
您没有说您使用什么语言,因此我提供了两个片段 - 用于 Python 和 PHP。但这里的线索是 (?=([A-F0-9]{32}))
模式(请参阅下面的示例)。
解决方案(Python)
有一个解决方案,下面是用Python编写的:
>>> import re
>>> data = '8AC905DD4AB2038E5F7EABEAE792AC41BC'
>>> matches = re.finditer(r'(?=([A-F0-9]{32}))', data)
>>> results = [match.group(1) for match in matches]
测试
结果将是(如 this demo ):
>>> results
['8AC905DD4AB2038E5F7EABEAE792AC41', 'AC905DD4AB2038E5F7EABEAE792AC41B', 'C905DD4AB2038E5F7EABEAE792AC41BC']
这正是您所期待的。
解决方案(PHP)
在 PHP 中,它可能如下所示:
<?php
$data = '8AC905DD4AB2038E5F7EABEAE792AC41BC';
$results = array();
preg_match_all('/(?=([A-F0-9]{32}))/', $data, $results);
并且 $results
将是以下数组:
Array
(
[0] => 8AC905DD4AB2038E5F7EABEAE792AC41
[1] => AC905DD4AB2038E5F7EABEAE792AC41B
[2] => C905DD4AB2038E5F7EABEAE792AC41BC
)
参见this demo求一个证明。
关于regex - 正则表达式: searching an arbitrary file for MD5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8424326/