Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Estrarre parti di una stringa

    Vorrei estrarre dei dati da un testo... Tale testo è una specie di rubrica (a dire il vero sono vCard del mio outlook) con un Tot di righe...
    Vorrei rintracciare "EMAIL:" (o chi per esso) e prendere il testo che viene dopo (che è l'indirizzo email) fino al carattere di "a capo".
    Stessa cosa per altre due o tre informazioni...

    Ho provato su una riga scritta così:
    codice:
    EMAIL;PREF;INTERNET:info@dominio.it
    
    $email = strstr($contenuto, 'EMAIL;PREF;INTERNET:');
    ma mi restituisce ANCHE tutto il resto del file
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  2. #2
    Forse una cosa del genere, non sono sicurissimo su \r\n, dipende dal sistema operativo che utilizzi, spesso è sufficiente \n.
    Codice PHP:
    $reg_exp "/EMAIL(\\w+?)\r\n/i";
    preg_match_all($reg_expr$text$linesPREG_SET_ORDER);
    $email $lines[0][1];
    // se ci fossero altre email: $lines[$i][1] 
    =======================
    http://www.abidibo.net

  3. #3
    Originariamente inviato da abidibo
    Codice PHP:
    $reg_exp "/EMAIL(\\w+?)\r\n/i";
    preg_match_all($reg_expr$text$linesPREG_SET_ORDER);
    $email $lines[0][1];
    // se ci fossero altre email: $lines[$i][1] 
    Non ho capito $lines cosa dovrebbe essere...

    Comunque mi restituisce
    Notice: Undefined offset: 0
    relativamente alla riga $email.....etc...
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  4. #4
    Comunque mi restituisce Notice: Undefined offset: 0 relativamente alla riga $email.....etc...
    Significa che non ha trovato alcun match, probabilmente a causa del finale, prova a mettere
    $reg_exp = "/EMAIL(\w+?)\n/i";

    Non ho capito $lines cosa dovrebbe essere...
    Praticamente quella funzione fa il match dell'espressione regolare su tutto il testo $text. Tutti i matching che trova li mette nell'array $lines che cosi' si popola:
    $lines[0] primo match
    $lines[1] secondo match e cosi' via
    Poi ciascun match è a sua volta un array, perche si possono matchare piu' parti con una sola espressione regolare. Il primo elemento ($lines[$i][0]) è il matching dell'intera espressione, nel nostro caso. Il secondo elemento ($lines[$i][1]) è il matching con la prima sottoricerca indicata dalle parentesi quadre (\w+?).

    ESEMPIO:
    $text = EMAILgino@email.it\n
    $lines[0][0] = EMAILgino@email.it\n
    $lines[0][1] = gino@email.it
    =======================
    http://www.abidibo.net

  5. #5
    Grazie per la spiegazione (e la disponibilità)... è molto chiara...

    Originariamente inviato da abidibo
    Significa che non ha trovato alcun match, probabilmente a causa del finale, prova a mettere
    $reg_exp = "/EMAIL(\w+?)\n/i";
    Purtoppo però il problema resta. Non capisco se è il match operator (si chiama così?) o altro...
    Se può servire... il mio file è fatto così (e dovrebbero essere tutti uguali):
    codice:
    BEGIN:VCARD
    VERSION:2.1
    N:qualcosa
    FN:qualcosa
    TEL;WORK;VOICE:1234/123456
    TEL;WORK;FAX:1234/123456
    ADR;WORK:;;Via diqua, 2 20033 Desio (MI)
    LABEL;WORK;ENCODING=QUOTED-PRINTABLE:Via di qua, 2 20033 Desio (MI)
    URL;WORK:www.unsito.it
    EMAIL;PREF;INTERNET:info@unsito.it
    NOTE;ENCODING=QUOTED-PRINTABLE:Referente: GINO PINO - Qualcosa - Note: Qualcos'altro
    da usare come nota
    
    
    
    
    
    
    
    REV:20090522T120627Z
    END:VCARD
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  6. #6
    Si, è di aiuto.. fai cosi:
    Codice PHP:
    $reg_expr "/EMAIL(.+?)\n/i";
    preg_match_all($reg_expr$text$linesPREG_SET_ORDER);
    $email $lines[0][1]; 
    con il \w non matchavo il ;...
    =======================
    http://www.abidibo.net

  7. #7
    Originariamente inviato da abidibo
    Si, è di aiuto.. fai cosi:
    ... ...
    con il \w non matchavo il ;...
    Beh... ora trova qualcosa ma il ; non lo "scavalca" restituendo una cosa del genere:

    ;PREF;INTERNET:info@miosito.it

    Potrei cambiare la stringa e scriverla per intero da così
    $reg_exp = "/EMAIL(.+?)\n/i";
    a così
    $reg_exp = "/EMAIL;PREF;INTERNET: (.+?)\n/i";

    Oppure c'è un metodo migliore?
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  8. #8
    Certo che trova quello, infatti matcha dopo EMAIL.
    se vuoi solo l'indirizzo email e il testo è proprio fatto cosi', usa pure

    $reg_expr = "/INTERNET([^\n]+)\n/i";

    è anche piu' performante della precedente.
    =======================
    http://www.abidibo.net

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.