Регулярное выражение: поиск произвольного файла для MD5 - PullRequest
2 голосов
/ 08 декабря 2011

См. Следующую строку ASCII из 34 символов. Я пытаюсь получить 3 совпадения хэша MD5 в этой строке.

8AC905DD4AB2038E5F7EABEAE792AC41BC

[A-F0-9]{32} соответствует только первым 32 символам.

Это часть моего бинарного проекта обратного инжиниринга.

Как я могу получить 3 разных совпадения из упомянутой строки? Любая идея приветствуется.

Приветствия

1 Ответ

3 голосов
/ 08 декабря 2011

Вы не сказали, какой язык вы используете, поэтому я предоставил два фрагмента - для 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]

Test

Результат будет (как в это демо ):

>>> 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
)

См. это демо для доказательства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...