1

不确定这是否可能,但我一直在考虑使用正则表达式来获取十六进制的电子邮件地址。基本上这是为了建立我的一些自动取证工具,但我在制作合适的正则表达式算法时遇到了问题。

电子邮件的正则表达式:/^([a-z0-9_.-]+)@([\da-z.-]+).([az.]{2,6})$/

十六进制值:

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

这就是我目前得到的(它只考虑小写和.com)。但它不起作用!我把一些简单的事情搞砸了吗?

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

[1] 我知道电子邮件只能小写,但我也需要考虑大写。

4

5 回答 5

1

我认为您正在处理错误的问题。假设您使用的是标准的十六进制字符等效项,您应该首先将电子邮件转换为十六进制,然后使用电子邮件正则表达式。这可以通过简单地一次处理电子邮件两个字符并chr(int('piece, 16))在每件上使用来完成。

于 2012-11-02T22:46:27.670 回答
1

定义类

@ = 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
)$/
于 2012-11-02T22:49:59.843 回答
0

我想我无法在任何地方发表评论,因为这个问题已经得到解答,但我认为这需要说明。

您采用的方法实际上比将每个单独的字符转换为等效的 ASCII 字符更糟糕。您实际上是将每个字节转换为2 个 ASCII 字符

只是为了引用您作为最终/工作模式发布的 REGEX 模式的一部分:4[0-9a-fA-F] 您正在尝试查找 chars @ABCDEFGHIJKLMNO。你有a-f 并且 A-F因为你试图解释以大写或小写形式存储的十六进制代码。硬盘驱动器上的十六进制代码不会以大写或小写形式存储(它甚至不会以十六进制代码存储)。您正在考虑向您呈现这些数据的任何工具 - 以 ASCII 格式。

您使用什么工具来访问这些数据?

如果您使用 python 读取 dd 图像文件,那么您需要使用正则表达式来处理原始数据。这就像[\x40-\x4f]复制上述内容。这都是不必要的,因为[@-O]会完成同样的事情。

我不确定你是如何测试这个的,但我怀疑你正在将十六进制代码粘贴到在线 REGEX 测试引擎中。然后,该测试引擎将这些十六进制代码解释为 2 个单独的字符,而不是一个字节的一对半字节。

于 2012-11-03T23:13:32.420 回答
0

与您想要实现的目标稍有不同,但请看一下Bulk Extractor,它解析驱动器并划分出电子邮件地址并按流行顺序列出它们。

于 2012-11-03T19:32:18.877 回答
0

我认为您需要查看 Python 中正则表达式的文档(http://docs.python.org/2/library/re.html)。

例如,[61-7a] 将匹配 6、1-7 或 a 中的任何一个。

于 2012-11-02T22:50:11.480 回答