Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    12

    Regex - Recuperare da un testo valori quali: telefono, cellulare, e-mail, url, indirizzo, ...

    Ciao a tutti, ho problemi con le regex per estrarre dati in php.
    Ho trovato su internet alcuni modelli di regex e ho creato io quella per rilevare il numero di cellulare.

    Da un testo, devo estrapolare tutte le informazioni: email, cellulare, telefono fisso, via/p.zza/c.da/..., url

    $text = 'https://www.domain.com/ www.blah.com 3401234567 blablablabla +393401234567 blabla 340 1234567 , +39 3401234567 340-1234567 340/1234567 email@hotmail.it 340.1234567 +393351234567 maila@hotmail.it 123456789 00393401234567 08251234567 +3906448866323 164864865 http://prova.net/beta/index.php?event=111 http://www.prova.net/ http://prova.net/beta/ https://www.domain.com ';


    Una delle poche che con preg_match_all dal sito http://www.phpliveregex.com/ mi restituisce qualcosa, è questa: (\+39)|(0039)?0\d+
    Ma cosa sbaglio?

    Grazie mille


    (Mi scuso se il codice è sporco e pieno di commenti, purtroppo ho fatto una serie di tentativi e forse mi sono perso in essi)


    codice:
    <?php
    function spulcia($regex, $text, $array){
    // eregi($regex, $text, $array);
    // preg_match_all($regex, $text, $array, PREG_OFFSET_CAPTURE);
    
     preg_match_all($regex, $text, $array);
     return $array;
    }
    
    
    ?>
    
    -- ------------------------
    
    <?php
    function stampa_arr($array){ /* è più bello questo di print_r, è solo per una stampa a video temporanea */
     for($i=0; $i<=sizeof($array); $i++) echo("<li>".$array[$i]."</li>");
    }
    
    $text = 'https://www.domain.com/ www.blah.com 3401234567 blablablabla  +393401234567 blabla 340 1234567 , +39 3401234567 340-1234567  340/1234567 email@hotmail.it 340.1234567 +393351234567 maila@hotmail.it  123456789 00393401234567 08251234567 +3906448866323  164864865  http://prova.net/beta/index.php?event=111 http://www.prova.net/  http://prova.net/beta/ https://www.domain.com ';
    
    echo("Testo: <br><br>" . $text);
    
    $regex_email = '[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}';
    $regex_cell = '(\+39)|(0039)?3\d{2}\W?(\d{7}|\d{6})';
    $regex_tel = '(\+39)|(0039)?0\d+';
    $regex_url = '(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&amp;%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&amp;%\$#\=~_\-]+))*';
    
    echo("<br>" .  "<br>");
    
    $array_email = spulcia($regex_email, $text, $array_email);
    $array_cell = spulcia($regex_cell, $text, $array_cell);
    $array_tel = spulcia($regex_tel, $text, $array_tel);
    $array_url = spulcia($regex_url, $text, $array_url);
    
    $matches = $array_cell;
    
    print_r($array_cell);
    
    for ($i=0; $i< count($matches[0]); $i++) {
       echo "intero criterio: ".$matches[0][$i]."\n";
       echo "parte 1: " . $matches[1][$i] . "\n";
       echo "parte 2: " . $matches[3][$i] . "\n";
       echo "parte 3: " . $matches[4][$i] . "\n\n";
    }
    
    echo("poggibonsi");
    
    preg_match_all($regex_tel, $text, $array);
    stampa_arr($array);
    
    /*
    echo("<br>E-Mail trovate: <br>"); //print_r($array_email);
    stampa_arr($array_email[0][0]);
    echo("<br>Cell   trovati: <br>"); //print_r($array_cell);
    stampa_arr($array_cell);
    echo("<br>Tel    trovati: <br>"); //print_r($array_tel);
    stampa_arr($array_tel);
    echo("<br>Url    trovati: <br>"); //print_r($array_url);
    stampa_arr($array_url);
    */
    /*
    preg_match_all($regex_email,$text,$matches_email);
    echo "<pre>" . print_r($matches_email,true) . "</pre>";
    
    
    preg_match_all($regex_cell,$text,$matches_cell);
    echo "<pre>".print_r($matches_cell,true)."</pre>";
    
    preg_match_all($regex_tel,$text,$matches_tel);
    echo "<pre>".print_r($matches_tel,true)."</pre>";
    
    preg_match_all($regex_url,$text,$matches_url);
    echo "<pre>".print_r($matches_url,true)."</pre>";
    */
    ?>

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    12
    up

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    12
    Nessuna risposta?
    Neanche un consiglio? :/

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    12
    up

  5. #5
    Utente di HTML.it L'avatar di Webmaster76
    Registrato dal
    Mar 2001
    residenza
    Torino
    Messaggi
    298
    Ti consiglio di fare per prima cosa un explode della stringa in modo da avere un array dei singoli valori e fare le regex un dato alla volta, altrimenti ne esci matto... perchè parsare tutto insieme?
    Un nuovo cms/framework... vuoi collaborare al progetto?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    12
    Mi fa uscire matto proprio l'esplosione dei valori, facendo print_r($array_cell); che dovrebbe contenere tutti i numeri di cellulare, li frammenta, li spezzetta.
    Presumo l'errore sia sulla regex, ma di tutte? Mi sembra strano! La regex della e-mail l'ho presa su internet e viene adoperata per validare gli indirizzi, come mai non posso adoperarla per estrarli da un testo? :/

  7. #7
    Utente di HTML.it L'avatar di Webmaster76
    Registrato dal
    Mar 2001
    residenza
    Torino
    Messaggi
    298
    Quote Originariamente inviata da betaalfa Visualizza il messaggio
    Mi fa uscire matto proprio l'esplosione dei valori, facendo print_r($array_cell); che dovrebbe contenere tutti i numeri di cellulare, li frammenta, li spezzetta.
    Presumo l'errore sia sulla regex, ma di tutte? Mi sembra strano! La regex della e-mail l'ho presa su internet e viene adoperata per validare gli indirizzi, come mai non posso adoperarla per estrarli da un testo? :/
    No, intendo di fare PRIMA un explode della stringa e poi andare a vedere pezzo per pezzo a cosa può corrispondere!

    $pieces = explode(" ", $text);

    foreach($pieces as $piece)
    {
    # controllo se è un url
    [..]
    # controllo se è una mail
    [..]
    # controllo se è un cellulare
    [..]
    }

    Così fai regex più semplici...
    Un nuovo cms/framework... vuoi collaborare al progetto?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    12
    Nulla, non riesco a risolvere

Tag per questa discussione

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.