Можно ли использовать Regex через Hexadecimal, чтобы найти адреса электронной почты

Не уверен, что это вообще возможно, но я искал использование Regex, чтобы получить адрес электронной почты в шестнадцатеричном формате. По сути, это создание некоторых из моих автоматизированных инструментов судебной экспертизы, но у меня возникают проблемы при создании подходящего алгоритма Regex.

Regex для электронной почты: /^([a-z0-9_.-]+)@([\da-z.-]+).([az.]]2,6 rout)$/

Шестнадцатеричные значения:

@ = 40
. = 2E
.com = 636f6d
_ = 5f
A/a = 41/61 [1]
Z/z = 5a/7a
- = 2d

Это то, что у меня есть на данный момент (учитываются только строчные буквы и.com). Но это не работает! Я что-то напутал?

"/^([61-7a]+)40([61-7a]+)23(636f6d)$/"

[1] Я знаю, что электронная почта может быть только в нижнем регистре, но мне нужно учитывать и заглавные.

5 ответов

Решение

определить классы

@ = 40
. = 2E
com = 636f6d
_ = 5f
a-z = (4[1-9a-f]|5[0-9a])
A-Z = (6[1-9a-f]|7[0-9a])
- = 2d

подставить в ваше регулярное выражение

/^([a-z0-9_.-]+)@([\da-z.-]+).([a-z.]{2,6})$/

/^(((4[1-9a-f]|5[0-9a])|(6[1-9a-f]|7[0-9a])|[0-9]|5f|2E|2d)+)40(([0-9]|(4[1-9a-f]|5[0-9a])|(6[1-9a-f]|7[0-9a])|2E|2d)+)2E(((4[1-9a-f]|5[0-9a])|(6[1-9a-f]|7[0-9a])){2,6})$/

ломается до...

/^
(
    (
        (4[1-9a-f]|5[0-9a])     // a-z
        |(6[1-9a-f]|7[0-9a])    // A-Z
        |[0-9]                  // 0-9
        |5f                     // _
        |2E                     // .
        |2d                     // -
    )+ // 1 or more times
) 
40
(
    (
        [0-9]                   // 0-9
        |(4[1-9a-f]|5[0-9a])    // a-z
        |(6[1-9a-f]|7[0-9a])    // A-Z
        |2E                     // .
        |2d                     // -
    )+ // 1 or more times
)
2E                              // .
(
    (
        (4[1-9a-f]|5[0-9a])     // a-z
        |(6[1-9a-f]|7[0-9a])    // A-Z
    ){2,6} // between 2 and 6 times
)$/

Я думаю, что вы подходите к проблеме неправильно. Предполагая, что вы используете стандартные шестнадцатеричные эквиваленты, вы должны сначала преобразовать электронную почту из шестнадцатеричной, а затем использовать регулярное выражение электронной почты. Это можно сделать, просто обрабатывая электронную почту двумя символами за раз, и используя chr(int('piece, 16)) на каждом куске.

Я не могу нигде оставлять комментарии, так как я думаю, что на эти вопросы уже дан ответ, но я думаю, что это нужно сказать.

Подход, который вы используете, на самом деле хуже, чем преобразование каждого отдельного символа в эквивалент ASCII. Вы фактически конвертируете каждый байт в 2 символа ASCII.

Просто для ссылки на часть шаблона REGEX, который вы опубликовали в качестве окончательного / рабочего шаблона: 4[0-9a-fA-F]Вы пытаетесь найти символы @ABCDEFGHIJKLMNO, У тебя есть a-f а также A-F потому что вы пытаетесь учесть, что шестнадцатеричный код хранится в верхнем или нижнем регистре. Шестнадцатеричный код на жестком диске не сохраняется в верхнем или нижнем регистре (он даже не сохраняется в шестнадцатеричных кодах). Вы учитываете любой инструмент, который представляет эти данные вам - в ASCII.

Какой инструмент вы используете для доступа к этим данным?

Если вы используете python для чтения файла изображения dd, то вам нужно использовать регулярное выражение, которое идет после необработанных данных. Это было бы что-то вроде [\x40-\x4f] повторить вышеизложенное. Это все ненужно, хотя, потому что [@-O] сделает то же самое.

Я не уверен, как именно вы это тестируете, но я подозреваю, что вы вставляете шестнадцатеричные коды в онлайн-механизм тестирования REGEX. Затем этот механизм тестирования интерпретирует эти шестнадцатеричные коды как 2 отдельных символа, а не как пару кусочков байта.

Немного в стороне от того, чего вы хотите достичь, но взгляните на Bulk Extractor, который анализирует диск, выделяет адреса электронной почты и перечисляет их в порядке популярности.

Я думаю, что вам нужно взглянуть на документацию по регулярным выражениям в Python (http://docs.python.org/2/library/re.html).

Например, [61-7a] будет соответствовать любому из 6, 1-7 или a.

Другие вопросы по тегам