Привет всем. У меня тут такая задача. мне нужна написать парсер email на PHP. Вроде бы что сложного? Но я элементарно не могу придумать хотя бы нормальный алгоритм. У меня пока два незаконченных варианта. 1. Искать по тексту @ а затем идти до пробела или одинарной кавычки. Проблема в том как идти? Ведь нужно и слева и справа отследить знаки. Можно ли это сделать? 2. Регулярные выражения. Тут я вообще на стопоре сижу... Думаю искать по шаблону мыльник затем заносить в массив после всего писать в файл. Хотя тут тоже все очень размыто и к тому же я не умею еще с ними работать. Если у кого то есть идеи по этому поводу, поделитесь пожалуйста. Заранее спасибо всем.
НУ на регулярнике может так?!: PHP: "/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2.3}/i" или PHP: "/^[-0-9a-z_]+@[-0-9a-z_^\.]+\.[a-z]{2,3}$/i" Ну а вобщем надо будет смотреть страницы, которые будуи парситься... Вот... хех, вроде работает. PHP: <? for($i=1;$i<3000;$i++){ $filename = 'http://www.***.ru/center.php?chp=showorg&num='.$i; echo $i.". "; $str = file_get_contents($filename); preg_match_all('|href="mailto:([^"]*)"|is',$str,$out); if(empty($out[1][0])) echo " no mail"; else{ echo " get ".$out[1][0]; fwrite($handler,$out[1][0]."\n"); } echo "\n"; } fclose($handler); ?> Скачивает страницу в переменную, разбирает её спомощью регулярного выражения и если мыло нашёл на странице, то пишет в файл.
Скажем так: 1.Считываем содержимое файла в массив 2. Разбиваем массив до space (чтобы каждое слово было отделено от другого) 3. Убираем лишние пробелы, кавычки и т.п. 4. Согласно шаблону находим адресс+дамп в массив. 5. Вывод Как уже показал Dr.Check, иди на php.net и прочти про preg_match_all().
Всем спасибо. Только все дело в том что мне нужен был парсер из БД или тхт файла. Пытался изменить скрипт от Dr.Check под себя но что то я совсем расслабился. Буду дальше напрягать оставшиеся мозги.
ну убираем цикл и меняем filename на имя текстового файла и всё собственно: PHP: <? $filename = 'file.txt'; echo $i.". "; $str = file_get_contents($filename); preg_match_all('|href="mailto:([^"]*)"|is',$str,$out); if(empty($out[1][0])) echo " no mail"; else{ echo " get ".$out[1][0]; fwrite($handler,$out[1][0]."\n"); } echo "\n"; fclose($handler); ?> Правда непонятно в каком виде там email ...
blaga толька сразу добивайся универсальности парсинга,б делай уклон не толька на mailto: но и прост на \w+@\w+\.\w+ т.е. на поиск @ и . между и после где идут буквы и цифры и знаки подчеркивания и еще тирэ, далее некоторые пишут типа domain[zz]mail[ss]ru тут тожу делай регесп. Еще сделай что бы твой скрипт скакал по сайту сам и на лету добовлял результ парсинга уже либо в файл либл еще куда. Sбор ссылок: 1. получаем результат в виде готовых ссылок; 1.1 конектимся по етим ссылкам в цикле foreach, однавременно текущий урл заносим в качестве ключа в ХЕШ а значение ставим в '1' (уже проканектились), так поступаем со всеми ссылками 1-го результата; 1.2 парсим контент от конекта этих ссылок (1.1), заносим их в ХЕШ в качестве ключа, а значение устонавливаем в '0' (не конектились), причем уже включаем проверку на наличия уже существующих ключей. 2.0 Далее мы конектимся уже во 2й раз по ключам, значение которых выставлено в '0', опять потом проверяем контент на наличия сыылок,парсим их , проверям на наличия уже в хеше, добовляем.
Кто нибудь видел бд например от phpBB? Там нету мейлто. Там только @ искать... Все равно всем спасибо...
А вот скажи, нафиг, писать парсер для БД, если можно использовать для этих нужд phpMyAdmin??? Видео нитрекса посмотри. Он как раз там этим занимался.