Szukanie adresów email z tekstu i wyświetlanie ich kolejno


(Mysql2) #1

Witam. Na mojej stronie mam dużo użytkowników. Mam też skrypt mailingowy, dzięki któremu mogę informować użytkowników o nowościach. Problem tkwi w tym, że kopiowanie pojedyńczych meili zajęło by mi trochę czasu. Czy ktoś może mi powiedzieć jak zrobić skrypt, aby wyłapywał meile z tekstu i wyświetlał je w słupku?


(Kutar 0) #2

No można wyciągnąć z tekstu wszystkie słowa, które zawierają małpę, potem sprwadzić czy po małpie i przed są jakieś znaki i czy po małpie dodatkowo znajduję się przynajmniej jedna kropka... można jeszcze kilka sprawdzeń robić dla bezpieczeństwa, ale te powinny wystarczyć;]


(Mysql2) #3

a jakich pentli mam do tego użyć????


(Wajrak) #4

http://forum.dobreprogramy.pl/viewtopic.php?t=129325

Spookojnie, 3 tematy dotyczące tego samego problemu?

P.S

Nie pętli tylko funkcji... A rozwiązanie masz już na tacy w najświeższym poście.


(Mysql2) #5

skrypt wajrak :

function get_addresses($file) {

  $breaking = array(' ', ',', '>', '<', "\t", "\r", "\n");

  $addr = array();

  $data = explode('@', file_get_contents($file));


  $n = count($data);

  for ($i = 1; $i < $n; $i++) {

    $addr[$i-1] = '@';

    $begin = 0;

    $end = strlen($data[$i-1]) - 1;

    while ((!in_array($data[$i-1]{$end}, $breaking)) and ($begin <= $end)) {

      $addr[$i-1] = $data[$i-1]{$end} . $addr[$i-1];

      $end--;

    }

    $begin = 0;

    $end = strlen($data[$i]) - 1;

    while ((!in_array($data[$i]{$begin}, $breaking)) and ($begin <= $end)) {

      $addr[$i-1] .= $data[$i]{$begin} ;

      $begin++;

    }

  }

  if (count($addr) == 0) {

    return FALSE;

  } else {

    return $addr;

  }


}

print_r(get_addresses('test.txt'));

Wywala mi błąd w lini 5


(Wajrak) #6

Jak znam życie nie czytałeś uważnie tego co Ci napisałem. Funkcja na tym przykładzie wyciąga maile z pliku test.txt , jak nie masz takiego pliku w katalogu ze skryptem będzie zgłaszała błąd w lini piątej bo nie może odczytać pliku którego nie ma.


(Mysql2) #7

hmm pojawia mi się to w takiej formie :

Array ( [0] => mail@wp.pl [1] => mail@yahoo.co.uk [2] => mail@o2.pl [3] => mail@poczta.onet.pl [4] => mail@gmail.com [5] => mail@wp.pl. [6] => mail@wp.pl )

a chciał bym aby wszystkie pojawiały się w słupku


(Wajrak) #8
function get_addresses($file) {

  $breaking = array(' ', ',', '>', '<', "\t", "\r", "\n");

  $addr = array();

  $data = explode('@', file_get_contents($file));


  $n = count($data);

  for ($i = 1; $i < $n; $i++) {

    $addr[$i-1] = '@';

    $begin = 0;

    $end = strlen($data[$i-1]) - 1;

    while ((!in_array($data[$i-1]{$end}, $breaking)) and ($begin <= $end)) {

      $addr[$i-1] = $data[$i-1]{$end} . $addr[$i-1];

      $end--;

    }

    $begin = 0;

    $end = strlen($data[$i]) - 1;

    while ((!in_array($data[$i]{$begin}, $breaking)) and ($begin <= $end)) {

      $addr[$i-1] .= $data[$i]{$begin} ;

      $begin++;

    }

  }

  if (count($addr) == 0) {

    return FALSE;

  } else {

    return $addr;

  }


}

$tablica = get_addresses('test.txt');

for ($i=0; $i<=count($tablica); $i++)

{

	echo $tablica[$i].'
';

}

Tak będzie wyświetlało jeden pod drugim, zakładam, że to miałeś na myśli pisząc słupek