php
  • regex
  • preg-match
  • preg-match-all
  • 2013-02-24 10 views 7 likes 
    7

    sto cercando di ottenere e-mail da una stringa.ottenere e-mail dalla stringa - sintassi regex + preg_match_all

    $string = "bla bla [email protected] MIME-Version: [email protected] bla bla bla"; 
    $matches = array(); 
    $pattern = '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b'; 
    preg_match_all($pattern,$string,$matches); 
    print_r($matches); 
    

    l'im errore di ottenere è: delimitatore non deve essere alfanumerico o backslash

    ottenuto la sintassi regex da qui http://www.regular-expressions.info/email.html

    cosa devo fare? Grazie in anticipo!

    +0

    Add/I o solo/dopo l'ultima b (che è nel modello) – Shridhar

    +0

    possibile duplicato del [ Come convalidare un indirizzo email in PHP] (http://stackoverflow.com/questions/12026842/how-to-validate-an-email-ad-ress-in-php) – PeeHaa

    risposta

    16

    Ti piace questa

    $pattern = '/[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/i'; 
    

    o più piccola versione :)

    $pattern = '/[a-z\d._%+-][email protected][a-z\d.-]+\.[a-z]{2,4}\b/i'; 
    
    +0

    funziona alla grande, puoi spiegare cosa causa l'errore e cosa hai fatto per risolverlo? –

    +1

    @MorSela Sì, il primo è necessario aggiungere delimitatori // all'inizio e alla fine del modello. Dopo aver avuto bisogno di aggiungere "i" modificatore per case insensitive. È tutto. :) – Winston

    +0

    grazie per questo m8, accettato asnwer :) –

    1

    Hai solo bisogno di avvolgere il tuo pattern in un delimitatore adeguato, come le barre in avanti. In questo modo:

    $pattern = '/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/'; 
    
    +0

    Ive l'ha provato prima, $ partite esce vuoto. –

    +1

    in questo caso, è necessario regolare la regex. L'errore di sintassi viene corretto delimitando correttamente; costruire una regex valida è tutta un'altra questione :) –

    1

    Quando si utilizzano le funzioni di espressione regolare PCRE lo considera necessario per racchiudere il modello da delimitatori:

    PHP Delimiters

    Often used delimiters are forward slashes (/), hash signs (#) and tildes (~). The following are all examples of valid delimited patterns.

    /foo bar/ 
    #^[^0-9]$# 
    +php+ 
    %[a-zA-Z0-9_-]% 
    

    Poi è necessario correggere questa linea:

    $pattern = '/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/'; 
    

    o

    $pattern = '#\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b#'; 
    
    +0

    ive l'ho provato prima, $ partite esce vuoto .. –

    +0

    riguarda il tuo pattern ... cambia il gioco con esso ... –

     Problemi correlati

    • Nessun problema correlato^_^