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

    Próbuję pobrać e-maile z ciągu.uzyskiwanie wiadomości e-mail z ciągu znaków - składnia 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); 
    

    błąd im coraz to: Separator nie musi być alfanumeryczny lub backslash

    got składni regex stąd http://www.regular-expressions.info/email.html

    co należy zrobić? z góry dziękuję!

    +0

    Dodaj/I czy tylko/po ostatnim b (czyli w strukturze) – Shridhar

    +0

    możliwy duplikat [ Jak sprawdzić poprawność adresu e-mail w PHP] (http://stackoverflow.com/questions/12026842/how-to-validate-an-email-address-in-php) – PeeHaa

    Odpowiedz

    16

    jak to

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

    lub mniejszej wersji :)

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

    działa świetnie, czy możesz wyjaśnić, co powoduje błąd i co zrobiłeś, żeby go naprawić? –

    +1

    @MorSela Tak, musisz najpierw dodać ograniczniki // na początku i końcu wzoru. Po tym trzeba było dodać modyfikator "i" dla wielkości liter. To wszystko. :) – Winston

    +0

    dziękuję za to m8, akceptowany asnwer :) –

    1

    Wystarczy zawinąć wzór we właściwym ograniczniku, takim jak ukośne kreski. Tak:

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

    Próbowałem go wcześniej, $ mecze wychodzi puste. . –

    +1

    w takim przypadku twoje wyrażenie regularne wymaga dostosowania. Błąd składniowy jest naprawiany przez prawidłowe wytyczanie; konstruowanie poprawnego wyrażenia regularnego to zupełnie inna sprawa :) –

    1

    Podczas korzystania pcre funkcje regex wymagało załączyć wzór przez ograniczniki:

    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_-]% 
    

    Następnie należy skorygować ten wiersz na:

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

    lub

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

    Próbowałem już wcześniej, $ mecze wychodzi pusty .. –

    +0

    o twoim wzorze ... zmień zabawę z nim ... –

    Powiązane problemy