Vai al contenuto
Allin

Estrarre tutti gli indirizzi email o URL da un blocco di testo

Pubblicato il 10/08/2026 · 14 min di lettura · Strumenti testo e lingua

Daniel Okonkwo

Daniel OkonkwoSviluppatore front-end e redattore Tech presso Allin

Performance web · Formati di file

Verificato su 4 fonti

Vedi il profilo
In breve

extract-urls cerca tratti di testo che iniziano con http:// o https:// e proseguono fino a uno spazio, una virgoletta doppia, un apostrofo, una parentesi angolare o una parentesi tonda chiusa. Quella definizione spiega quasi tutto ciò che azzecca e tutto ciò che sbaglia. Azzecca i link fra parentesi e i link Markdown. Tiene il punto di un URL che chiude una frase, tiene una virgola, un punto e virgola, un punto esclamativo o una parentesi quadra chiusa, e tronca l'articolo di Wikipedia Fox_(animal) in Fox_(animal — un link rotto invece che assente, il che è peggio. Inoltre non ha alcun indicatore di insensibilità alle maiuscole, quindi un link scritto HTTPS://EXAMPLE.COM in un documento in maiuscolo non viene trovato affatto. Nemmeno gli indirizzi www nudi senza schema vengono trovati, né i link ftp o mailto. extract-emails si comporta all'opposto a fine frase: poiché il suo schema deve finire su lettere, un punto finale resta correttamente fuori. Ma la sua classe di caratteri per la parte locale è solo ASCII, quindi un indirizzo che inizia con una lettera accentata torna troncato invece che saltato — un noto nome francese con accento circonflesso ha prodotto un indirizzo più corto di tre lettere, e un cognome con apostrofo ha perso tutto ciò che precedeva l'apostrofo. Sono indirizzi sbagliati, non omissioni, e non c'è alcun avviso. Legge anche le credenziali di un URL nella forma utente:password@host come un indirizzo email. Controlla cosa esce prima di mandare qualsiasi cosa a quegli indirizzi.

Un URL a fine frase si tiene il punto; un indirizzo email a fine della stessa frase no. Un nome accentato dentro un indirizzo torna troncato. Ogni caso qui è stato passato negli strumenti e l'output esatto è riportato.

Di chi sono questi dati

Questo articolo è scritto per chi elabora testo che già possiede — un'esportazione di contatti da un sistema che amministri, un elenco di link uscito da un tuo documento, un insieme di indirizzi che un cliente ti ha mandato da mettere in ordine. Raccogliere indirizzi dalle pagine web altrui per costruire una lista di distribuzione è un'altra attività, con il proprio rischio legale: secondo il Regolamento generale sulla protezione dei dati, un indirizzo email che identifica una persona è un dato personale qualunque sia la pagina in cui è stato pubblicato, e le regole antispam sulla posta commerciale non richiesta si sommano a questo. È tutto ciò che se ne dirà qui.

Il motivo pratico per dirlo è che entrambi gli strumenti girano interamente nella pagina, sulla tua macchina, senza caricare nulla. È una vera proprietà di riservatezza quando il testo è un elenco di clienti, e vale la pena saperlo. Non è un permesso giuridico, e le due cose si confondono abbastanza spesso da meritare di essere separate in una frase prima di passare a ciò che gli strumenti fanno davvero.

Dove finisce un URL è un'ipotesi, e qui si gioca su cinque caratteri

Lo standard URL del WHATWG definisce cos'è un URL e come analizzarne uno già isolato. Non definisce come trovarne uno dentro un paragrafo di prosa, perché quella domanda non ha risposta corretta: un punto dopo un URL è punteggiatura per chi legge e un carattere di percorso legittimo per un parser, e nulla nei byte li distingue. Ogni estrattore sceglie quindi un insieme di caratteri su cui fermarsi. Questo si ferma agli spazi, alla virgoletta doppia, all'apostrofo, a entrambe le parentesi angolari e alla parentesi tonda chiusa, ed è stato messo alla prova con quindici contesti per vedere dove porta.

Escludere la parentesi tonda chiusa compra due casi importanti. Un link fra parentesi esce pulito, e così un link Markdown scritto come testo fra parentesi quadre seguito dall'indirizzo fra tonde. Costa un caso, e il costo è peggiore di quanto il guadagno sia buono: un indirizzo che contiene legittimamente parentesi nel percorso — la convenzione di disambiguazione di Wikipedia è l'esempio quotidiano — viene tagliato al compagno della parentesi aperta e restituito troncato. Un URL troncato sembra ancora un URL. Finisce in un foglio di calcolo, viene cliccato, e produce una pagina non trovata settimane dopo senza nulla che permetta di risalirci.

I caratteri che non esclude sono quelli che punteggiano la scrittura ordinaria. Un URL a fine frase è tornato con il punto attaccato. Lo stesso per uno seguito da virgola, uno da punto e virgola, uno da punto esclamativo, uno fra parentesi quadre, uno fra virgolette tipografiche curve, uno avvolto in trattini bassi Markdown e uno fra apici inversi. Le virgolette a caporale francesi sopravvivono, ma solo perché per convenzione si scrivono con uno spazio per lato, ed è lo spazio a fermare la corrispondenza. Nessuno di questi casi produce un errore; producono una stringa leggermente sbagliata da ripulire a mano.

Il link in maiuscolo che non si trova mai

Lo schema è scritto in minuscolo e non porta alcun indicatore di insensibilità alle maiuscole. Un testo con HTTPS://EXAMPLE.COM/A non ha restituito nulla. Nemmeno Https://example.com/a con una sola maiuscola, che è ciò che producono alcuni elaboratori di testo quando un link apre una frase e la maiuscola automatica è attiva. Non è un caso limite; è un'intera categoria di documento — comunicati, note legali, qualsiasi cosa composta in uno stile aziendale che urla — da cui questo strumento estrarrà zero link senza segnalare alcun problema. Lo standard URL dice esplicitamente che lo schema è confrontato dopo essere stato messo in minuscolo: uno schema in maiuscolo è un URL normale e valido, non malformato.

Altre tre assenze sono di progetto e non accidentali, e conviene sapere quale è quale. Un indirizzo nudo del tipo www seguito da un dominio non ha schema, quindi non corrisponde, e non potrebbe senza che lo strumento indovini che ogni parola con dei punti è un host. Un link ftp non corrisponde. Un link mailto non corrisponde, benché extract-emails ne tiri fuori volentieri l'indirizzo. Se la tua fonte è una pagina di contatti scritta da una persona e non da una macchina, aspettati che gli indirizzi nudi siano la maggioranza e prevedi una seconda passata con extract-domain, che li cerca.

L'indirizzo accentato che torna sbagliato

extract-emails cerca una sequenza di lettere, cifre, punti, trattini bassi, segni di percentuale, segni più e trattini, poi una chiocciola, poi un host, poi un punto e almeno due lettere. Un'etichetta dopo un più sopravvive, cosa che conta perché è così che molte persone etichettano i loro abbonamenti. Un punto finale resta correttamente fuori, perché lo schema deve finire su lettere: la stessa frase che appiccica un punto indesiderato a un URL dà a un indirizzo una fine pulita, bella illustrazione di quanto decida la forma dello schema.

La parte locale è solo ASCII, ed è lì che passa da incompleta a sbagliata. Poiché un'espressione regolare cerca una corrispondenza in qualunque punto della riga invece di pretendere l'intero token, un indirizzo la cui prima lettera è accentata non manca la corrispondenza: corrisponde a partire da subito dopo la lettera accentata. Un nome tedesco con dieresi ha prodotto un indirizzo formato dalle ultime due lettere del nome più la chiocciola e l'host. Un nome francese con cediglia ha perso le prime tre lettere. Un nome portoghese con tilde ha tenuto solo l'ultima. E un cognome con apostrofo ha restituito solo la parte dopo l'apostrofo. Ognuno di questi è un indirizzo sintatticamente valido che appartiene a qualcun altro, o a nessuno, e nulla nell'output lo segnala.

La metà di dominio ha il problema speculare e fallisce in modo più sicuro. Un host scritto con lettere accentate nel proprio alfabeto — i nomi di dominio internazionalizzati che la RFC 5890 definisce e che la RFC 6532 ammette nelle intestazioni di posta — non corrisponde affatto, quindi l'indirizzo viene saltato invece che rovinato. Scritto nella sua forma punycode, che inizia con il prefisso x-n, lo stesso host corrisponde senza problemi, perché il punycode è ASCII per costruzione. Due note minori dalle prove: una parte locale fra virgolette, che la RFC 5322 permette, non è riconosciuta; e un indirizzo in maiuscole miste e il suo gemello minuscolo sopravvivono entrambi alla deduplicazione, perché il confronto è esatto mentre la metà di dominio è insensibile alle maiuscole per specifica, quindi quei due sono una sola casella elencata due volte.

Domini e numeri di telefono, in breve

extract-domain copre il vuoto lasciato dall'estrattore di URL: legge host da link con schema, da indirizzi email e — con un interruttore attivo di default — da domini nudi scritti senza alcuno schema. Toglie l'utente e la password davanti a un host, la porta dietro, il punto radice finale e, opzionalmente, un www iniziale. Tutto ciò è stato confermato su una riga con un indirizzo di intranet con credenziali. Rifiuta inoltre un elenco di estensioni di file perché un'immagine o un file di pagina non si legga come dominio, e quelle presenti nell'elenco vengono effettivamente saltate.

Due difetti vale la pena segnalarli. Primo, un dominio nudo a fine frase viene mancato del tutto: lo schema che trova i domini nudi si rifiuta di fermarsi davanti a un punto, così una frase che finisce con un dominio seguito da punto non ha restituito nulla, mentre lo stesso dominio a metà frase, o prima di una virgola, o prima di un punto esclamativo, è stato trovato. Ed è il modo più comune in cui un dominio compare in un testo, ed è l'unico caso che non gestisce. Secondo, l'elenco delle estensioni è un elenco fisso e non una regola, quindi le estensioni che non vi figurano sono lette come domini: un file di archivio e un file video sono tornati come se fossero host. Nessuno dei due problemi produce un messaggio d'errore.

extract-phone-numbers è il più prudente dei quattro. Riconosce quattro forme precise invece di una qualsiasi sequenza di cifre, richiede fra sette e quindici cifre una volta tolta la punteggiatura, ed è stato verificato che lascia in pace le date sia in anno-mese-giorno sia in giorno/mese, e che lascia in pace un lungo numero di riferimento. Ciò che non può fare è distinguere un numero di telefono da qualcosa la cui forma è esattamente quella di un numero: un riferimento d'ordine di tre cifre, tre cifre e quattro cifre è tornato come numero nordamericano, e nulla nel testo dice il contrario. Leggi il suo output invece di fidartene, frase a cui tutto questo articolo continua a tornare.

Casi difficili passati negli estrattori, con l'output esatto osservato
InputCosa escePerché
Un link a fine frase, in extract-urlsIl link con il punto attaccatoL'insieme di arresto è spazio, virgoletta, apostrofo, angolari e parentesi tonda chiusa — non il punto
Un link fra parentesi, o un link MarkdownPulito, senza la parentesiLa parentesi tonda chiusa è nell'insieme di arresto
Un articolo di Wikipedia il cui percorso finisce fra parentesiTroncato alla parentesi chiusa — un link rotto, non mancanteLa stessa regola che salva i link fra parentesi rompe questo
Un link scritto con schema in maiuscoloAssolutamente nullaLo schema è in minuscolo e non porta indicatore di insensibilità alle maiuscole
Un indirizzo con etichetta dopo un più, prima della chiocciolaEstratto intero, etichetta compresaIl segno più è dentro la classe di caratteri della parte locale
Un indirizzo il cui nome porta dieresi, cediglia o tildeUn indirizzo più corto, sintatticamente valido e sbagliato — senza avvisoLa classe della parte locale è ASCII, e la corrispondenza parte semplicemente dopo la lettera accentata
Un indirizzo su un host scritto in alfabeto accentatoNulla — ma la scrittura punycode dello stesso host funzionaSaltare è più sicuro che rovinare; il punycode è ASCII per costruzione
Un URL con nome utente e password davanti all'hostextract-emails riporta password e host come un indirizzo emailUna chiocciola fra due sequenze plausibili è tutto ciò che serve allo schema
Un dominio nudo a fine frase, in extract-domainNulla — benché lo stesso dominio prima di una virgola venga trovatoLo schema dei domini nudi si rifiuta di fermarsi davanti a un punto, e il punto della frase è un punto
Estrai URLEstrai ogni link unico da un blocco di testo. Trascina un file invece di incollarlo: viene letto nel browser e non viene mai inviato.Prova lo strumento

Domande frequenti

Perché i miei link estratti escono con un punto o una virgola alla fine?
Perché l'estrattore si ferma agli spazi, alle virgolette, alle angolari e alla parentesi tonda chiusa, e a nient'altro. La punteggiatura di frase è un carattere di percorso legittimo dal punto di vista dello schema, quindi il punto che chiude la tua frase diventa l'ultimo carattere del link. Non c'è impostazione che lo cambi. Il rimedio pratico è una passata di trova e sostituisci sull'elenco estratto, o un taglio manuale se l'elenco è corto. Il problema non riguarda gli indirizzi email estratti, perché il loro schema deve finire su lettere: un punto finale non può far parte di una corrispondenza.
Alcuni link del mio documento non sono stati trovati affatto. Cosa avevano in comune?
Controlla prima lo schema. Un link il cui schema porti una qualsiasi maiuscola è invisibile a questo strumento: un indirizzo tutto in maiuscolo non ha restituito nulla alla prova, e nemmeno uno con una sola maiuscola iniziale, che è ciò che produce un elaboratore di testo quando un link apre una frase. Poi cerca i link senza schema: un indirizzo nudo che inizia con www non viene riconosciuto, perché lo schema richiede il protocollo. E i link ftp e mailto sono fuori dal suo ambito per progetto. Mettere il documento in minuscolo prima di estrarre risolve il primo problema; extract-domain, che cerca gli host nudi, copre quasi tutto il secondo.
Gli indirizzi che restituisce sono utilizzabili così come sono?
Non senza guardarli. L'estrattore garantisce che ogni risultato corrisponde al suo schema, non che ogni risultato sia un indirizzo che appartiene a qualcuno. Due modi di fallimento sono stati osservati direttamente: un indirizzo la cui parte locale inizia con una lettera accentata viene restituito troncato, il che produce un indirizzo dall'aria valida che non è quello del testo; e le credenziali di un URL della forma utente, due punti, password, chiocciola, host vengono restituite come se fossero un indirizzo. Se l'elenco è corto, leggilo. Se è lungo, ordinalo e guarda le estremità: gli indirizzi troncati si raggruppano in cima perché sono corti, e quelli fabbricati tendono a condividere un host che riconoscerai come server e non come fornitore di posta.
Decodifica l'entità e commerciale in una stringa di query?
No. Un URL copiato dal codice HTML, dove il separatore fra due parametri è scritto come entità e commerciale e non come carattere, torna con l'entità intatta: è stato provato e i cinque caratteri si conservano esattamente. Il risultato è un link che verrà richiesto con nomi di parametro che iniziano con «amp punto e virgola», il che di solito significa che il server ignora in silenzio il secondo parametro. Se la tua fonte è HTML e non testo renderizzato, decodifica prima le entità; se è testo copiato da una pagina renderizzata, il browser le ha già decodificate e non c'è nulla da fare.
Posso usare questi strumenti su indirizzi raccolti da siti web altrui?
Gli strumenti elaboreranno ciò che incolli; se tu possa raccogliere e usare quegli indirizzi è una questione a parte, e non tecnica. Nell'Unione europea un indirizzo email che identifica una persona è dato personale ai sensi del Regolamento generale sulla protezione dei dati, qualunque sia la pagina in cui compariva, e le regole sulla posta commerciale non richiesta si applicano indipendentemente. Negli Stati Uniti le regole equivalenti sulla posta commerciale sono federali. Se l'elenco è tuo — la tua esportazione, il tuo documento, i dati di un cliente che ti ha incaricato di ripulirli — nulla di tutto ciò si pone, ed è la situazione per cui questo articolo è stato scritto. Se non lo è, la domanda da risolvere è giuridica, e il fatto che la pagina fosse pubblica non vi risponde.

Articoli che potrebbero interessarti

Tutte le guide
TutorialBasi delle regex: guida per principiantiUn'espressione regolare è un modello per cercare testo. Ecco i mattoni — classi di caratteri, quantificatori e ancore — con un esempio.GuidaCostruire un URL con parametri che sopravvive a un copia-incollaTre codifiche, una differenza visibile: %20 o +. La modalità modulo del generatore riproduce URLSearchParams byte per byte su diciassette valori — ma dagli un URL di base con un frammento e ogni parametro finisce dentro l'hash, dove nessun server lo vede.GuidaTogliere l'HTML come si deve: che cosa può e non può fare un rimuovitore di tagTogliere i tag e sanificare l'HTML sono due lavori diversi. Un frammento reale passato attraverso una regex ingenua e attraverso un rimuovitore consapevole della formattazione, con i contenuti di script e style, le interruzioni di blocco, i commenti, i CDATA e l'ordine delle entità mostrati in output.ConfrontocamelCase, snake_case, kebab-case: quale usare, e perché raramente scegli tuLe convenzioni non sono gusto. Il trattino è l'operatore meno, quindi kebab-case non può essere un identificatore nella maggior parte dei linguaggi: ecco perché lo usano CSS e URL. In più, il viaggio di andata e ritorno sugli acronimi che corrompe i nomi in silenzio, e la regola che lo risolve.SpiegazionePunto e virgola, tab, barra verticale: scegliere un delimitatore che sopravviva al viaggioPerché la lingua di chi legge decide il delimitatore, che cosa fa il convertitore alle virgolette quando cambi, che cos'è davvero la prima riga sep=, e il conteggio delle celle citate sullo stesso export scritto in cinque modi.GuidaCodici di stato HTTP spiegati: quelli che davvero si confondono301 contro 308, 302 contro 307, 401 contro 403, 404 contro 410 — più che cosa promette davvero Retry-After su un 429 o un 503. Le coppie in cui scegliere il codice sbagliato cambia il comportamento, non solo le parole.

Strumenti correlati

Tutto quanto segue descrive ciò che questi strumenti fanno oggi, verificato eseguendo le loro stesse trasformazioni sugli input esatti riportati in ogni articolo, e non ciò che una norma imponga a uno strumento di testo. Il trattamento del testo riga per riga non ha un'autorità unica: cosa conta come spazio, se due righe accentate siano o no la stessa riga, e dove finisca un URL dentro una frase sono decisi in modo diverso da ogni programma in cui incollerai del testo. Quando uno strumento sbaglia un caso, lo si dice apertamente invece di aggirarlo. Prima di passare qualsiasi cosa di questo su un elenco che non potrai riesportare, passa su una copia e confronta il numero di righe alle due estremità.

Fonti

Hai notato un errore in questo articolo?