Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    [Java + RegExp] Estrarre indirizzo e-mail da una stringa

    Ciao a tutti.
    Mi sto scervellando da ieri, ma senza risultati di sorta.
    Problema: devo riuscire ad isolare un indirizzo e-mail contenuto in una stringa di caratteri. L'indirizzo e-mail varia da stringa a stringa e le uniche cose che so è che esso può essere delimitato dai seguenti carattrti:

    SPAZIO
    esempio:
    codice:
    "stringa contenente l'indirizzo mioindirizzo@qualcosa.altro da parsare"
    PUNTO E VIRGOLA
    esempio:
    codice:
    "anche questa stringa; mioindirizzo@qualcosa.altro può andare bene"
    MAGGIORE e MINIORE
    esempio:
    codice:
    "ecco un bell'esempio <mioindirizzo@qualcosa.altro> di quello che dico"
    PARENTESI DI OGNI GENERE (tonde, quadre e graffe)
    esempio:
    codice:
    "altro esempio [mioindirizzo@qualcosa.altro] fatto apposta"
    Il tutto in un mix che più vario non si può: negli esempi sopra riportati, ad esempio, tutti gli indirizzi erano anche separati da spazi, ma questo non succede sempre. Può capitare che gli indirizzi e-mail siano separati solo dal loro separatore. Esempio:
    codice:
    "Anche[]0123456789 questo;mioindirizzo@qualcosa.it;può <ciao> capitare"
    Per cercare di "agevolarmi" sono ricorso all'utilizzo di Espressioni Regolari, ma non ne sono venuto a capo molto bene. Ad esempio ho prodotto questa, ma non reagisce nel modo corretto:
    codice:
    String regexp = "\\S.*@[a-zA-Z_0-9\\.]*\\.[>a-zA-Z_0-9]*"
    Qualcuno potrebbe cercare di capire come comporre un'espressione regolare che faccia esattamente quello che ho in mente di fare? Potrei tollerare che i separatori finiscano nel ritultato, ma vorrei garantirmi un minimo di leggibilità degli indirizzi.

    Praticamente un'espressione regolare che prenda qualsiasi carattere sia concatenato ad una '@' (esclusi i separatori) e sia seguito da qualcos'altro concatenato ad un punto concatenato a qualcos'altro (esclusi i separatori).


    Grazie.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  2. #2
    Utente di HTML.it L'avatar di Fox82
    Registrato dal
    Feb 2002
    Messaggi
    459
    Sono un po' arrugginito in java, questa è la mia versione della regExp in python:

    codice:
    s = "([a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+@[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+)"
    Funziona con tutti i casi che hai postato, l'unica modifica forse è inserire all'interno delle quadre i caratteri non alfanumerici ammessi negli indirizzi e-mail ('_', '-', ecc...)

    Spero la traduzione non sia troppo complessa

    Ciao
    Linux user number 403381

    Stop TCPA!

  3. #3
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    questo funziona sempre
    codice:
    String s = "Anche[]0123456789 questo;mioindirizzo@qualcosa.it;può <ciao> capitare";
    Pattern p = Pattern.compile(".*[\\s<\\[;]([a-z0-9._]+@[a-z0-9.]+)[\\s>\\];].*", Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(s);
    if (m.matches())
      System.out.println(m.group(1));
    dovrebbe andare bene

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da floyd
    questo funziona sempre
    codice:
    String s = "Anche[]0123456789 questo;mioindirizzo@qualcosa.it;può <ciao> capitare";
    Pattern p = Pattern.compile(".*[\\s<\\[;]([a-z0-9._]+@[a-z0-9.]+)[\\s>\\];].*", Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(s);
    if (m.matches())
      System.out.println(m.group(1));
    dovrebbe andare bene
    Direi che funziona a meraviglia.
    Ora cerco di spulcialre per bene questa RegExp per capire cosa non andava nella mia.

    Ti ringrazio molto.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.