Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dzielenie
Forum PHP.pl > Forum > PHP
jarmiar
witam,

jak można z teo wyciągnąć datę, e-mail, temat, godzinę i ilość znaków?

Kod
N 1)28-Aug-2007 advt@advt.pl 1K14:52 hvbu (236 chars)



bardzo proszę o pomoc bo jest mi to bardzo potrzebne

pozdrawiam
Mordoran
Na szybko to bym sie zabawil z explode" title="Zobacz w manualu PHP" target="_manual() i po spacjach, znakach szczegolnych w tym stringu lecial.
Ale tak na serio to trzeba by zabawiac sie z wyrazeniami regularnymi. A to juz trzeba sobie przypomniec jak sie je stosowalo smile.gif
seaquest
Kod
/N 1\)(.+?) (.+?) 1K(.+?) (.+?) \(([0-9]+) chars\)/


preg_match" title="Zobacz w manualu PHP" target="_manual zwraca:

Kod
Array
(
    [0] => N 1)28-Aug-2007 advt@advt.pl 1K14:52 hvbu (236 chars)
    [1] => 28-Aug-2007
    [2] => advt@advt.pl
    [3] => 14:52
    [4] => hvbu
    [5] => 236
)


Pisane na szybko i pewnie mało przystosowane. Daj kilka stringów przykładowych to będzie łatwiej dostosować.
jarmiar
niestety liczba po N zmienia się wraz z kolejnym mailem i preg_match nie działa w związku z tym.oto przykładowe stringi
Kod
N 1)28-Aug-2007 advt@advt.pl 1K14:52 hvbu (236 chars)
N 2)03-Jul-2006 jakis@email.pl 26K18:19 jakiś tekstnbsdjbsjdh (512 chars)
N 3)03-Jan-2007 jajaja@jajaja.pl 5K00:59 fgbfgbfgb (365 chars)
bim2
Cytat
Array
(gh
[0] => N 3)03-Jan-2007 jajaja@jajaja.pl 5K00:59 fgbfgbfgb (365 chars)
[1] => 03-Jan-2007
[2] => jajaja@jajaja.pl
[3] => 00:59
[4] => fgbfgbfgb
[5] => 365
)

  1. <?php
  2. preg_match('/N [0-9]+)(.+?) (.+?) [0-9]+K(.+?) (.+?) (([0-9]+) chars)/', 'N 3)03-Jan-2007 jajaja@jajaja.pl 5K00:59 fgbfgbfgb (365 chars)', $aMatches);
  3. print_r($aMatches);
  4. ?>

Jeśli chcesz wyciągnąć N i K, to daj
  1. <?php
  2. preg_match('/N ([0-9]+?))(.+?) (.+?) ([0-9]+?)K(.+?) (.+?) (([0-9]+) chars)/', 'N 3)03-Jan-2007 jajaja@jajaja.pl 5K00:59 fgbfgbfgb (365 chars)', $aMatches);
  3. print_r($aMatches);
  4. ?>
jarmiar
niestety występuje błąd:


Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 8 in /lista.php on line 22

Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 8 in /lista.php on line 22

Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 8 in /lista.php on line 22

Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 8 in /lista.php on line 22

Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 8 in /lista.php on line 22
bim2
Skopiuj jeszcze raz. Po dodaniu zauważyłem literówkę i ją zmieniłem.

BTW. Szybki jesteś, bo zmieniałem kod zaraz po napisaniu posta tongue.gif
jarmiar
nadal jest to samo jak kopiuję pierwszy kod

Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 8 in /lista.php on line 22

Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 8 in /lista.php on line 22

Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 8 in /lista.php on line 22

Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 8 in /lista.php on line 22

Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 8 in /lista.php on line 22

Jak kopiuję drugi to wyśietla mi:

Array ( ) Array ( ) Array ( ) Array ( ) Array ( )
bim2
Bez jaj.
Cytat
Array
(
[0] => N 3)03-Jan-2007 jajaja@jajaja.pl 5K00:59 fgbfgbfgb (365 chars)
[1] => 3
[2] => 03-Jan-2007
[3] => jajaja@jajaja.pl
[4] => 5
[5] => 00:59
[6] => fgbfgbfgb
[7] => 365
)


  1. <?php
  2. preg_match('/N ([0-9]+?))(.+?) (.+?) ([0-9]+?)K(.+?) (.+?) (([0-9]+) chars)/', 'N 3)03-Jan-2007 jajaja@jajaja.pl 5K00:59 fgbfgbfgb (365 chars)', $aMatches);
  3. print_r($aMatches);
  4. ?>


Czemu więc mi działa? Może jakiś inny nagłówek jest?
jarmiar
to jest mój cały skrypt
  1. <?php
  2.  $num = $_GET['num'];
  3.  if(isset($num))
  4.  {
  5. $link=imap_open("{pop3.*******.pl:110/pop3}INBOX", $login, $haslo);
  6. $header=imap_header($link,$_GET['num']);
  7. echo "Od: $header->fromadress<br>";
  8. echo "Do: $header->toaddress<br>";
  9. echo "Data: $header->Date<br>";
  10. echo "Temat: $header->Subject<br><br>";
  11. echo imap_body($link,$_GET['num'], $login, $haslo);
  12.  }
  13.  else
  14.  {
  15.  $login = "*****";
  16.  $haslo = "******";
  17.  $link=imap_open("{pop3.*******.pl:110/pop3}INBOX", $login, $haslo);
  18.  echo imap_last_error();
  19.  $headers=imap_headers($link);
  20.  for($x=1; $x < count($headers); $x++) {
  21.  $idx=($x-1);
  22.  preg_match('/N [0-9]+)(.+?) (.+?) [0-9]+K(.+?) (.+?) (([0-9]+) chars)/', $headers[$idx], $aMatches);
  23.  print_r($aMatches);
  24.  //w tym miejscu chcę to wyciągnąć za pomocą preg_metch()
  25.  echo '<a href="lista.php?num='.$x.'">'.$dane[10].'</a>';
  26.  if(!empty($headers[$idx]))
  27.  {
  28.  /*
  29.  $wiadomosc = 'Nowa wiadomośc zatytuowana: '.$headers[$idx].'.';
  30.  $adres_bramki = "http://smsowo.pl/sms/sendsms.php";
  31.  $c = curl_init();
  32.  curl_setopt($c, CURLOPT_URL, "$adres_bramki");
  33.  curl_setopt($c, CURL_POST, 1);
  34. curl_setopt($c,CURLOPT_POSTFIELDS,"numer=**********&text=$wiadomosc&podpis=Poczta ");
  35. curl_exec($c);
  36.  curl_close($c); 
  37.  */
  38.  }
  39.  }
  40.  }
  41.  ?>
seaquest
A nie możesz używać po prostu używać funkcji imap? Po co w ogóle angażować w to wyrażenia regularne?

imap_fetch_overview" title="Zobacz w manualu PHP" target="_manual

Zobacz tam na przykładowy kod.
jarmiar
wynalazłem taki kod:
  1. <?php 
  2.  $mbox=imap_open("{pop3.**************.pl:110/pop3}INBOX", $login, $haslo);
  3.  $MC=imap_check($mbox);
  4.  $MN=$MC->Nmsgs;
  5.  $overview=imap_fetch_overview($mbox,"1:$MN",0);
  6.  $size=sizeof($overview);
  7.  for($i=$size-1;$i>=0;$i--)
  8.  {
  9.  $val=$overview[$i];
  10.  $msg=$val->msgno;
  11.  $from=$val->from;
  12.  $date=$val->date;
  13.  $subj=$val->subject;
  14.  $size=$val->size;
  15.  echo '<b> ID:</b> '.$msg.' <b>OD</b>: '.$from.'<b> Data:</b> '.$date.' <b>Temat:</b> '.$subj.' <b>Rozmiar:</b> '.$size.'<br />';
  16.  }
  17.  imap_close($mbox);
  18.  ?>


lecz niestety maile wyświetla mi to w bardzo nieprzyjazny sposób

ID: 2 OD: j*******@tlen.pl Data: Wed, 29 Aug 2007 10:52:47 -0000 Temat: 1K12:52 testowa wiadomosc nbdfgbgfbdfnng Rozmiar: 280
ID: 1 OD: =?UTF-8?Q?Jarek?= Data: Wed, 29 Aug 2007 12:51:34 +0200 Temat: =?UTF-8?Q?testowa_wiadomosc?= Rozmiar: 745


Czy jest jakaś możlwiość przerobienia tego by wyświetlało mi w sposób:

ID Od Temat Rozmiar Data
seaquest
Wygląda na to że albo IMAP nie potrafi sobie poradzić z RFC albo masz maile niepoprawnie sporządzone.

A próbowałeś jakiejś klasy z PHP Classes?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.