на самом деле это называется PERL-golfing.. +) кста, вот мой вариант кода ; ).. Code: /@rambler\.ru/i&&print for<> (заменять rambler на r(.+)r считаю "грязным хаком".. : ) )
Code: perl -ne "/r.r/&&print" mails.txt ну или как вышесказавший.. r(.+)r.ru.. все равно чистого кода в первом случае 12 символов, во втором - 16.. что в три раза меньше самого маленького, что предложил Tarigonik ЗЫ дижимортал опередил на несколько секунд)))) гг.. не видел + без грязного хака ))) Code: perl -ne "/rambler.ru/&&print" mails.txt все равно чистого кода на несколько символов меньше чем у диджи))
Незачет - слеш забыл перед собачкой )) А я так и написал - "жесткий твик" ) Очень ненадежно, могут левые мыльники всплыть (как в логине, так и в домене) и модификатор i надо добавить Тоже самое - надо бы собаку добавить, а к ней и слеш + самое главное - модификатор i для разных регистров
тогда оптимально будет что-то вроде Code: perl -ne "/\@r(.+?)r.r/i&&print" mails.txt есть еще варианты? )
Вариант есть, точнее исправление: perl -ne "/\@r(.+)r.r/i&&print" mails.txt Непонятно, зачем ты туда ? добавил. (.+) значит один или несколько символов, больше ниче не надо. blackybr: привычка думаю автор получил что хотел, да и мы померились размерами клозед
Извиняюсь за поднятую тему. Но если к примеру есть текстовый документ с мэйлами, такого формата: Возможно ли наоборот удалить с помощью скрипта всё, кроме мыла и ника, т.е. чтоб формат вышел такого вида: [email protected]::abbie Если есть возможность помочь, буду благодарен, т.к. в php не силён.
PHP: <?php $fp = fopen("mail.txt","rb"); while (!feof ($fp)) { $out = fgets($fr, 255); if(strpos($out, '@') !== false) { $new_fp = fopen("new_mail.txt","wb"); fputs($new_fp, $out); } } fclose($fp); fclose($new_fp); ?>
Isis -огромное спасибо, что откликнулся. Но при попытке пропарсить на локалхосте, выдаёт кучу ошибок Имя базы поставил такое же, mail.txt В чём может быть проблемма? 0_o
PHP: <?php $fp = fopen("mail.txt","rb"); while (!feof ($fp)) { $out = fgets($fp, 255); if(strpos($out, '@') !== false) { $new_fp = fopen("new_mail.txt","wb"); fputs($new_fp, $out); } } fclose($fp); fclose($new_fp); ?>
Работает ! только выдирает по одной записи, начиная с последней . Если я из базы удаляю последнюю запись, то он записывает в файл предидущую. Но только одну.
PHP: <?php $old_file_name = 'mails.txt'; $new_file_name = 'new_mails.txt'; $new_array = array(); foreach(explode("\n", file_get_contents($old_file_name)) as $string) { if(preg_match('~[A-Za-z0-9\._-]+@[A-Za-z0-9\._-]+::.+~', $string)) { $new_array[] = $string; } } $fopen = fopen($new_file_name, 'a'); fwrite($fopen, implode("\n", $new_array)); fclose($fopen); ?> Не тестил
как-то php выглядит с одной стороны роднее, а с другой такой гигантизм прям по сравнению я перловкой) кстати, а че ежели сначала замутить strtolower($mails); а потом тупо выдергивать строки, в которых есть '@rambler.ru' по-моему будет проще регулярок. хотя хз
PHP: <?php $file = file('mail.txt'); foreach ($file as $mail) { if (strpos($mail, '@rambler.ru') !== false) { echo $mail; } }
Полная версия (с выводом в новый файл): PHP: <?php $file = file('in.txt'); foreach ($file as $mail) { if (strpos($mail, '@rambler.ru') !== false) { $out[] = $mail; } } $file = fopen('out.txt', 'w'); fputs($file, implode('', $out)); fclose($file);
Приветствую, прошу прощения, что апнул тему... В общем есть база вида: [email protected]::goodmorning что следует изменить в вышеприведённом коде, для отсеивания имен и составления списка чистых мыл, вида: [email protected] Или выложите плз рабочий кусок кода, т.к. в php не силён Заранее благодарен, с ув. ThreeD
open(IN,"mails.txt") || die "cant open file man!"; while(<IN>) { print $1."@".$2,"\n" if /(\w+)\@(.*?):\w+)/; }