使用Java中的连字符提取混淆的电子邮件

时间:2012-03-19 19:56:53

标签: java regex obfuscation

我想提取一个电子邮件地址,该地址使用该格式的连字符进行模糊处理:f-o-o-@-e-x-a-m-p-l-e-.-c-o-m

到目前为止我所做的是:

String email = "f-o-o-@-e-x-a-m-p-l-e-.-c-o-m";

Pattern p = Pattern.compile("((\\w-)+)@-((\\w-)+)\\.-((\\w-){1,}\\w{1,6})");
Matcher m = p.matcher(email);

while (m.find()) {
    email = email.replace("-", "");
}

System.out.println(email);

但我想知道,如果电子邮件已经有一个连字符“ - ”,例如:foo-with-hyphen@example.comfoo@example-hyphen.com,如果theos邮件以上述方式进行模糊处理,我的代码将无效。我怎么能解决这个问题?

3 个答案:

答案 0 :(得分:3)

听起来像你想要的是:

String email = "f-o-o-@-e-x-a-m-p-l-e-.-c-o-m";
email = email.replaceAll("(.)-", "$1");
System.out.println(email);

.模式匹配任何字符,而\w仅匹配数字和字母。

答案 1 :(得分:2)

在我看来,你可以删除所有其他连字符,这应该没问题?我的意思是删除字符串中奇数索引处的连字符。

我假设连字符在两边都用连字符填充,因此原始的连字符不会丢失,如果不是这样的话,如果它们没有以相同的格式保存,它将不起作用,即“e-- -x --- a --- m --- p --- l ...“其中实际字符串是”exampl -...“

答案 2 :(得分:0)

尝试类似这样的例子

string email = "e-x-a-m-p-l-e-@-e-x-a-m-p-l-e---p-l-a-c-e-.-o-r-g";
string accum = "";
int index = 0;
int count = email.Count;
while (index < count)
{
    accum += email[index];
    index++;
    if (index < count)
    {
        if(email[index] != '-')
        {
            NOT_A_HYPHEN_ERROR;
        }
    }
    index++;
}

就像耶稣拉莫斯的解决方案一样,但警告你,如果你输入的字符串格式不正确。