PDA

Просмотр полной версии : Парсинг mail'ов


ANONIM123
24.06.2009, 19:01
Есть список txt, а в нём куча мылов, в перемешку с текстом

Нужно выпарсить все майлы, и создать список майлов, чтобы не повторялись... Навеярняка уже есть готовые скрипты.. Выложите плиз :)

TheSoul
25.06.2009, 00:12
В файл text.txt кидаешь всё что надо отпарсить
В конце получишь мыла в файле pars_emails.txt

#!/usr/bin/perl -w

open (FILE , "<text.txt");
chomp (@text = <FILE>);
close FILE;

undef %saw;

while (@text)
{
$pars = shift @text;
$pars =~ /\b(.*?)\@(.*?)\.(.{2,4})/g;
$email = "$1\@$2\.$3";
push @in,$email;
}

@in = grep(!$saw{$_}++, @in);
open (FILE2 , ">>pars_emails.txt");

while (@in)
{
$end = shift @in;
print FILE2 "$end\n";
}
close FILE2;

eLWAux
25.06.2009, 00:22
$f = @implode('',@file('INPUT.TXT'));
if (preg_match_all('/(\w+@\w+\.\w{2,3})/'),$f,$m) {
$m = array_unique($m);
var_dump($m);
}

demond
25.06.2009, 11:34
TheSoul, твой вариант не подойдет хотя бы потому что в адресах с зоной домена из 4-х букв домен будет урезан до 3-х (например вместо mail.info будет mail.inf), что не есть гуд!
eLWAux, а у тебя если в адресе будет -(тире) или .(точка) , то они будут проигнорированы, т.е. \w проверяет только состоит ли текст только из букв, цифр и символов подчеркивания.
поэтому предлагаю в качестве регулярки для поиска следующее:
(.*) ([\w+\-\.]+\@[\w\-\.]+\.\w{2,4}) (.*)
Хотя, конечно, надо видеть текст!

ReduKToR
25.06.2009, 12:32
Допустим меня интересует для БД в формате .sql

demond
25.06.2009, 12:52
Допустим меня интересует для БД в формате .sql
пример текста дай, чтобы не изобретать! И я тебе приведу готовое регулярное выражение!

b3
25.06.2009, 14:07
Допустим меня интересует для БД в формате .sql
помоему ТС хочет вытянуть с дампа мыльники, тогда уже легче сделать запрос в БД:
SELECT email_column FROM table_name