• Super User

    Trovare un url o una mail in una stringa

    Ciao,
    qualcuno di voi sa come fare per ottenere questo:

    www.google.com

    Ossia, data una stringa trovare che sia un link (con o senza http://) o una mail di modo da generare un codice html del tipo

    <a href="">
    

    o

    mailto:ecc ecc
    

    Grasssssie

    PS: poi facciamo una pillola per questo 😄


  • Super User

    Per gli URL prova così:

    
    $regex = "/&#40;&#40;&#91;a-z0-9&#93;&#91;-a-z0-9&#93;+\.&#41;+&#91;a-z&#93;&#123;2,4&#125;&#41;/is";
    $replace = "<a href=\"http://$1\">$1</a>";
    $text = "Testo www.google.com di prova.";
    $text = preg_replace &#40;$regex, $replace, $text&#41;;
    
    

    Per le e-mail, dipende da quanto vuoi che il riconoscimento sia preciso.

    Ho visto regex per il riconoscimento degli indirizzi e-mail che arrivano a diverse centinaia di caratteri.


  • Super User

    Low, hai un link da consigliarmi per le regex?


  • Super User

    ho applicato il tuo suggerimento

    Ecco il risultato: http://www.autoelaborate.com/recensione145.html

    Non è male...anche se mi risolve come link il contenuto dopo la @ e anche parole del tipo

    Che bella questa macchina.Mi piace moltissimo.

    In questo caso macchina.Mi diventa un link 😄


  • Super User

    Se ti riferisci ad una regex per le e-mail, posso anche scrivertela io se non cerchi nulla di perfetto.

    Altrimenti l'unica altra fonte che conosco è "Mastering Regular Expressions", che è il libro considerato la "bibbia" delle regex. Non so se è stato tradotto in italiano. In questo libro c'è un esempio di una regex che descrive gli indirizzi e-mail, anche quelli più complessi. E' lunghissima.


  • Super User

    ho trovato questo:

    You can do this by using the following code:
    
    <?php
    function hyperlink&#40;&$text&#41;
    &#123;
       // match protocol&#58;//address/path/
       $text = ereg_replace&#40;"&#91;a-zA-Z&#93;+&#58;//&#40;&#91;.&#93;?&#91;a-zA-Z0-9_/-&#93;&#41;*", "<a href=\"\\0\">\\0</a>", $text&#41;;
    
       // match www.something
       $text = ereg_replace&#40;"&#40;^| &#41;&#40;www&#40;&#91;.&#93;?&#91;a-zA-Z0-9_/-&#93;&#41;*&#41;", "\\1<a href=\"http&#58;//\\2\">\\2</a>", $text&#41;;
    &#125;
    ?>
    
    You can use this function like this&#58;
    <?php
    $line = "Check the links&#58; www.yahoo.com http&#58;//www.php.net";
    hyperlink&#40;$line&#41;;
    // Now, all text that looks like a link becomes a link
    ?> 
    

    Ora è corretto 😉

    Grazie mille Low, appena trovo per la mail lo posto.


  • Super User

    @Tuonorosso said:

    Non è male...anche se mi risolve come link il contenuto dopo la @ e anche parole del tipo

    Che bella questa macchina.Mi piace moltissimo.

    In questo caso macchina.Mi diventa un link 😄

    Perché è generica al massimo. Possiamo limitarla agli indirizzi che iniziano con "www." e separati da spazi:

    
    $regex = "'\s&#40;http://&#41;?&#40;www\.&#40;&#91;a-z0-9&#93;&#91;-a-z0-9&#93;+\.&#41;+&#91;a-z&#93;&#123;2,4&#125;&#41;\s'is";
    $replace = "\s<a href=\"http&#58;//$2\">$2</a>\s"; 
    
    

    Può diventare come vuoi, basta che si stabilisce con precisione cosa deve diventare un link e cosa non deve.

    Se me lo dici te ne scrivo una precisa, e magari la provo pure, visto che sto programmando alla cieca. 😄


  • Super User

    @LowLevel said:

    Se ti riferisci ad una regex per le e-mail, posso anche scrivertela io se non cerchi nulla di perfetto.

    Altrimenti l'unica altra fonte che conosco è "Mastering Regular Expressions", che è il libro considerato la "bibbia" delle regex. Non so se è stato tradotto in italiano. In questo libro c'è un esempio di una regex che descrive gli indirizzi e-mail, anche quelli più complessi. E' lunghissima.

    No no, figurati nn star li a sbatterti, ti chiedevo un link che spiegasse la sintassi delle regex in modo abbastanza semplice quanto completo.

    Grazie ancora


  • Super User

    @LowLevel said:

    @Tuonorosso said:

    Non è male...anche se mi risolve come link il contenuto dopo la @ e anche parole del tipo

    Che bella questa macchina.Mi piace moltissimo.

    In questo caso macchina.Mi diventa un link 😄

    Perché è generica al massimo. Possiamo limitarla agli indirizzi che iniziano con "www." e separati da spazi:

    
    $regex = "'\s&#40;http://&#41;?&#40;www\.&#40;&#91;a-z0-9&#93;&#91;-a-z0-9&#93;+\.&#41;+&#91;a-z&#93;&#123;2,4&#125;&#41;\s'is";
    $replace = "\s<a href=\"http&#58;//$2\">$2</a>\s"; 
    
    

    Può diventare come vuoi, basta che si stabilisce con precisione cosa deve diventare un link e cosa non deve.

    Se me lo dici te ne scrivo una precisa, e magari la provo pure, visto che sto programmando alla cieca. 😄

    No Low, non ti preoccupare, al massimo sai cosa potresti fare? 😄
    Spiegare a grandi linee la sintassi, faresti cosa gradita a molti...o almeno a me 😄

    Grazie ancora


  • Super User

    Per le email ho trovato questa:

    ereg_replace &#40;'&#91;_a-zA-z0-9\-&#93;+&#40;\.&#91;_a-zA-z0-9\-&#93;+&#41;*\@' . '&#91;_a-zA-z0-9\-&#93;+&#40;\.&#91;a-zA-z&#93;&#123;1,3&#125;&#41;+', '[url="mailto:\\0"]\\0', $txt&#41;;
    

    Sembra funzionare tutto, guardate qui: http://www.autoelaborate.com/recensione145.html


  • Super User

    @Tuonorosso said:

    Spiegare a grandi linee la sintassi, faresti cosa gradita a molti...o almeno a me 😄

    Ok, scriverò una pillola.

    Sembra funzionare tutto, guardate qui: http://www.autoelaborate.com/recensione145.html

    Dovresti sostituire {1,3} con {1,4}, altrimenti non accetterà i nomi di dominio con suffissi più lunghi di 3 caratteri (ad esempio .info).


  • Super User

    Fatto, grazie per il suggerimento, riporto il codice poi apro un post dove riassumo tutto in attesa della tua preziona pillola 😄

    
    ereg_replace &#40;'&#91;_a-zA-z0-9\-&#93;+&#40;\.&#91;_a-zA-z0-9\-&#93;+&#41;*\@' . '&#91;_a-zA-z0-9\-&#93;+&#40;\.&#91;a-zA-z&#93;&#123;1,4&#125;&#41;+', '[url="mailto:\\0"]\\0', $txt&#41;; 
    
    

  • User Attivo

    @LowLevel said:

    @Tuonorosso said:

    Spiegare a grandi linee la sintassi, faresti cosa gradita a molti...o almeno a me 😄

    Ok, scriverò una pillola.

    Sembra funzionare tutto, guardate qui: http://www.autoelaborate.com/recensione145.html

    Dovresti sostituire {1,3} con {1,4}, altrimenti non accetterà i nomi di dominio con suffissi più lunghi di 3 caratteri (ad esempio .info).

    meglio ancora {2,4} visto che minimo è 2 caratteri
    :ciauz: