PHP: foreach(file('mail.txt') as $account) { $data=explode(':',$account); print_r($data); } Хз, что у тебя, юзай это.
<?php // Пример 1 $pizza = "piece1 piece2 piece3 piece4 piece5 piece6"; $pieces = explode(" ", $pizza); echo $pieces[0]; // piece1 echo $pieces[1]; // piece2 // Пример 2 $data = "foo:*:1023:1000::/home/foo:/bin/sh"; list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data); echo $user; // foo echo $pass; // * ?> (c) php.net
Вариант через руглярки PHP: $file = 'file.txt'; $content = file_get_contents($file); preg_match_all("/(.*?):(.*?)(\r\n|\z)/ism", $content, $match); for ($i = 0; $i < count($match[0]); $i++) { echo('email = ' . $match[1][$i]); echo('<br>'); echo('password = ' . $match[2][$i]); echo('<hr>'); }
Ну вот 3 варианта обработки файла: PHP: <?php // вариант 1 foreach (explode ("\n", file_get_contents ('1.txt')) as $line) { if (empty ($line)) continue; list ($email, $pass) = explode (':', $line); echo "$email\t$pass\n"; } // вариант 2 foreach (file ('1.txt') as $line) { $line = rtrim ($line); if (empty ($line)) continue; list ($email, $pass) = explode (':', $line); echo "$email\t$pass\n"; } // вариант 3 $content = file_get_contents ('1.txt'); $content = preg_replace ('/\n+/', "\n", $content); preg_match_all ('/(.+?):(.+?)\n/', $content, $m); for ($i = 0; $i < count ($m[1]); $i++) { echo "{$m[1][$i]}\t{$m[2][$i]}\n"; } ?> В последнем случае надо б иметь в конце файла пустую строку
Читай внимательнее ! Все варианты уже выложили и они гораздо короче. А для регулярок я выкладывал, где можно без пустой последней строки!
ну если у человека не работает explode значед он что-то недоговаривает или недопонимает, из-за чего лучше увидеть строку, чем обьяснение, что сократит время на решение задачи и обьяснение ее словами. во как
Спасибо всем за ответы А как обращаться к переменным в этом случае? Строка, которую парсю, выглядит так: mail@mail.ru:moipass
Если кто не в теме - ачат почему - то режет это иногда. Юзер имел в виду mail@mail.ruassword. Dark_Scorpicore, я тебе написал, имхо, самый оптимальный вариант. Теперь с комментами: PHP: foreach(file('mail.txt') as $account) # в цикле обрабатываем каждую строчку файла mail.txt { $data=explode(':',$account); # разделяем мейл, пасс echo $data[0].' - login.'.$data[1].' - pass'; # выводим даные } #Мегахакерский скрипт by me
перевод строки забыл, будет каша при выводе ) зы ТС мне кажеться у тебя список идет без переноса строки user@mail.ruass?user@mail.ruass ? тогда нужно делать двойной explode по " : " по второму разделителю, что наврное есть пробел
PHP: <?php $file = 'file.txt'; $content = file_get_contents($file); //регулярное выражение (.*?):(.*?)(\r\n|\z) возвратит все вхождения "почтовый ящик:пароль" //(.*?) - первая и вторая группы вхождений preg_match_all("/(.*?):(.*?)(\r\n|\z)/ism", $content, $match); //Перебираем в цикле все найденные позиции //$i - поизиция элемента в массиве for ($i = 0; $i < count($match[0]); $i++) { //в $match[0] хранится массив всех найденных вхождения, т.е. элементы вида имя почтового ящика:пароль //$match[0][$i] - обращение к $i позицией в массиве "почтовый ящик:пароль" echo('group = ' . $match[0][$i]); echo('<br>'); //в $match[1] хранится массив всех найденных значений по первой группе вхождения, т.е. имя почтового ящика //$match[1][$i] - обращение к $i позицией в массиве "почтовых ящиков" echo('email = ' . $match[1][$i]); echo('<br>'); //в $match[2] хранится массив всех найденных значений по второй группе вхождения, т.е. пароли //$match[2][$i] - обращение к $i позицией в массиве "паролей" echo('password = ' . $match[2][$i]); echo('<hr>'); } ?> Если ты запустишь скрипт, то всё поймёшь наглядно
лажа ) если акки идут в одну строку через пробел, выдаст: group = user1@mail.ruassword1 user2@mail.ruassword2 email = user1@mail.ru password = password1 user2@mail.ruassword2
тогда так: PHP: $accounts=explode(' ',file_get_contetns('mails.txt')); foreach ($accounts as $account) { $var=explode(':',$account); print_r($var); }
Нада делать под конкретный случай! ИМХО Или прописывать "или" в разделителе регулярки '(\n|\r\n|\+|\#|\ |\*)' PHP: <?php $file = 'file.txt'; $separator = '(\r\n|\z)'; // ' ' или '_' или '+' или '\n' или '\#' и т.д. :) $content = file_get_contents($file); preg_match_all("/(.*?):(.*?)' . $separator . '/ism", $content, $match); for ($i = 0; $i < count($match[0]); $i++) { echo('group = ' . $match[0][$i]); echo('<br>'); echo('email = ' . $match[1][$i]); echo('<br>'); echo('password = ' . $match[2][$i]); echo('<hr>'); } ?>
Народ, зачем усложнять задачу? Это простая строчка, разбивка которой может обойтись без регулярок. FireFenix, даже этот код можна сделать более оптимальным. Зачем использовать цикл PHP: for ($i = 0; $i < count($match[0]); $i++) если для работы с массивами предназначен цикл PHP: foreach()
Если сделать задачу на все случаи жизни, то регулярки правят миром foreach - да несомненно выведет всё что есть. Но ведь если мне нужна только первая группа выборки? или вторую присвоить/найти различия с другим массивам? тогда поэлементно может и не наглядно, зато практично