Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Разбитие строки на подстроки(вопрос) (https://forum.antichat.xyz/showthread.php?t=124525)

Dark_Scorpicore 10.06.2009 14:24

Разбитие строки на подстроки(вопрос)
 
Доброго времени суток всем!
Пишу на PHP чекер акков ВК, не для продажи, чисто для себя.
Столкнулся с такой проблемой:
когда я беру мыла и пасс из текстовичка в виде мейл:пасс, и разбиваю на подстроки ф-ей explode, то первое мыло ложится в массив $array[0] (как мне и нужно), а пасс от этого мыла присоединяется к следующему мылу и ложится в $array[1] (неправильно).
То есть нужно так $array[0] - мейл, $array[1] - пасс от этого мейла. Лично я думаю, что тут нужно плюсовать 2 exploid'а, но пока ничего не вышло.
Подскажите, как быть
Спасибо.

Kaimi 10.06.2009 14:34

Код покажи

mailbrush 10.06.2009 14:38

PHP код:

foreach(file('mail.txt') as $account)
{
$data=explode(':',$account);
print_r($data);


Хз, что у тебя, юзай это.

Zitt 10.06.2009 14:41

<?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

LEE_ROY 10.06.2009 15:34

строку которую парсиш выложи

FireFenix 10.06.2009 15:59

Вариант через руглярки
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>');



mailbrush 10.06.2009 16:00

Цитата:

я беру мыла и пасс из текстовичка в виде мейл:пасс
LEE_ROY, зачем строчка, если есть условие?

diehard 10.06.2009 16:00

Код:

preg_match_all("/(.+):(.+)/", file_get_contents("accs.txt"), $accs);

krypt3r 10.06.2009 16:18

Ну вот 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";
  }
?>

В последнем случае надо б иметь в конце файла пустую строку

FireFenix 10.06.2009 16:27

Цитата:

Сообщение от krypt3r
Ну вот 3 варианта обработки файла:
В последнем случае надо б иметь в конце файла пустую строку

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

LEE_ROY 10.06.2009 17:09

Цитата:

Сообщение от mailbrush
LEE_ROY, зачем строчка, если есть условие?

ну если у человека не работает explode значед он что-то недоговаривает или недопонимает, из-за чего лучше увидеть строку, чем обьяснение, что сократит время на решение задачи и обьяснение ее словами. во как :)

Dark_Scorpicore 10.06.2009 17:36

Спасибо всем за ответы

Цитата:

Сообщение от FireFenix
Вариант через руглярки
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>');



А как обращаться к переменным в этом случае?

Цитата:

Сообщение от LEE_ROY
лучше увидеть строку

Строка, которую парсю, выглядит так:

mail@mail.ru:moipass

mailbrush 10.06.2009 17:44

Цитата:

mail@mail.ruassword
Если кто не в теме - ачат почему - то режет это иногда. Юзер имел в виду mail@mail.ru:password.

Dark_Scorpicore, я тебе написал, имхо, самый оптимальный вариант.
Теперь с комментами:
PHP код:

foreach(file('mail.txt') as $account# в цикле обрабатываем каждую строчку файла mail.txt

$data=explode(':',$account); # разделяем мейл, пасс
echo $data[0].' - login.'.$data[1].' - pass'# выводим даные

#Мегахакерский скрипт by me 


LEE_ROY 10.06.2009 18:21

Цитата:

Сообщение от mailbrush
Если кто не в теме - ачат почему - то режет это иногда. Юзер имел в виду mail@mail.ru:password.

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.ru:pass?user@mail.ru:pass ? тогда нужно делать двойной explode по " : " по второму разделителю, что наврное есть пробел :confused:

FireFenix 10.06.2009 18:24

Цитата:

Сообщение от Dark_Scorpicore
А как обращаться к переменным в этом случае?

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>'); 


?>

Если ты запустишь скрипт, то всё поймёшь наглядно :)

LEE_ROY 10.06.2009 19:07

лажа )
если акки идут в одну строку через пробел, выдаст:
group = user1@mail.ru:password1 user2@mail.ru:password2
email = user1@mail.ru
password = password1 user2@mail.ru:password2

mailbrush 10.06.2009 19:14

тогда так:
PHP код:

$accounts=explode(' ',file_get_contetns('mails.txt'));
foreach (
$accounts as $account)
{
$var=explode(':',$account);
print_r($var);



FireFenix 10.06.2009 19:56

Цитата:

Сообщение от LEE_ROY
лажа )
если акки идут в одну строку через пробел, выдаст:
group = user1@mail.ru:password1 user2@mail.ru:password2
email = user1@mail.ru
password = password1 user2@mail.ru:password2

Нада делать под конкретный случай! ИМХО :)
Или прописывать "или" в разделителе регулярки '(\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>');  
}  

?>


mailbrush 10.06.2009 20:05

Народ, зачем усложнять задачу? Это простая строчка, разбивка которой может обойтись без регулярок.
FireFenix, даже этот код можна сделать более оптимальным. Зачем использовать цикл
PHP код:

for ($i 0$i count($match[0]); $i++) 

если для работы с массивами предназначен цикл
PHP код:

foreach() 


FireFenix 10.06.2009 20:20

Цитата:

Сообщение от mailbrush
Народ, зачем усложнять задачу? Это простая строчка, разбивка которой может обойтись без регулярок.

Если сделать задачу на все случаи жизни, то регулярки правят миром :)
Цитата:

Сообщение от mailbrush
FireFenix, даже этот код можна сделать более оптимальным. Зачем использовать цикл

foreach - да несомненно выведет всё что есть. Но ведь если мне нужна только первая группа выборки? или вторую присвоить/найти различия с другим массивам? тогда поэлементно может и не наглядно, зато практично

mailbrush 10.06.2009 20:31

Цитата:

Если сделать задачу на все случаи жизни, то регулярки правят миром
Не в этом случае.

LEE_ROY 10.06.2009 20:35

вообщем вот мое решение, еси в файле акки лежат к примеру вот так:
Цитата:

user1@mail.ru:password1 user2@mail.ru:password2 user3@mail.ru:password3 user4@mail.ru:password4 user4@mail.ru:password4
user4@mail.ru:password4
user5@mail.ru:password5
через пробел тоесть, то можно распарсить вот так:
PHP код:

<?php


$name 
file_get_contents("c:/vk.txt");
$array preg_split("/[ \\n]/"$name);

echo 
"<PRE>";

foreach ( 
$array as $value )    {
    
$acc explode(":"$value);
    echo 
$acc[0] ." - "$acc[1] ."\n";
}

echo 
"</PRE>";

?>

регулярку ессно можно подкрутить под свое :)

Dark_Scorpicore 11.06.2009 10:31

Итак, вот какой кусок кода по проверке валида аккаунта. Но не работает.. В чем косяк?

PHP код:

foreach(file($txt_file) as $account
{
    
$data=explode(':',$account);
    
$link "http://vkontakte.ru/login.php?op=a_login_attempt&email=".$data[0]."&pass=".$data[1]."&expire=0";
    
$res go($link$cookie);
    
$searchtext 'good';
    if(
strpos($res$searchtext) == false)
       print 
"".$data[0]." and ".$data[1]." not valid";
    else{
       print 
"".$data[0]." and ".$data[1]." are valid";
  }
  } 


FireFenix 11.06.2009 10:49

Выложи функцию go и все зависимые ибо телепаты в отпуске

Dark_Scorpicore 11.06.2009 11:32

FireFenix, вот функция go, если еще что-то понадобится буду редактировать этот пост
PHP код:

function go($link$data){
$ch curl_init();
curl_setopt($chCURLOPT_URL,$link);
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
curl_setopt($chCURLOPT_TIMEOUT10);
curl_setopt($chCURLOPT_GET1);
curl_setopt($chCURLOPT_HEADER1); 

$otvet curl_exec($ch);
curl_close($ch);
return 
$otvet;


И да, файлы в текстовике лежат так(каждый на новой строке):

mail1:moipass1
mail2:moipass2
mail3:moipass3
mail4:moipass4

LEE_ROY 11.06.2009 14:38

капчу наверно выплевывает, или структура запроса изменилась...


Время: 02:25