2014-02-13 27 views
-3

我在文件中有下面的字符串。在PHP中解析電子郵件正則表達式

BEGIN:VCALENDARPRODID://Yahoo//Calendar 
//ENVERSION:2.0METHOD:REQUESTBEGIN:VEVENTSUMMARY:Review MeetingDESCRIPTION:Testing the 
yahoomail eventCLASS:PUBLICDTSTART;TZID=Etc/GMT:20140213T163000ZDTEND;TZID=Etc 
/GMT:20140213T173000ZLOCATION:ChennaiPRIORITY:0SEQUENCE:1UID:252f25fc- 
a39c-4121-9835-774a6c558b33ATTENDEE;RSVP=TRUE:mailto:[email protected]; 
RSVP=TRUE:mailto:[email protected];RSVP=TRUE:mailto:[email protected]; 
RSVP=TRUE:mailto:[email protected];RSVP=TRUE:mailto:[email protected]; 
CN=Sherin jemima G;SENT- 
BY="mailto:[email protected]":mailto:[email protected]:OPAQUEEND:VEVENTBEGIN:VTIMEZONETZID: 
Europe/London+0100TZNAME:BSTDTSTART:19810329T010000RRULE:FREQ=YEARLY;BYMONTH=3; 
BYDAY=-1SUEND:DAYLIGHTBEGIN:STANDARDTZOFFSETFROM:+0100TZOFFSETTO:+0000TZNAME:GMTDTSTART:199 
61027T020000RRULE:FREQ=YEARLY;BYMONTH=10; 
BYDAY=-1SUEND:STANDARDBEGIN:STANDARDTZOFFSETFROM:-000115TZOFFSETTO:+0000TZNAME:GMTDTSTART:1 
8471201T000000RDATE:18471201T000000END:STANDARDBEGIN:DAYLIGHTTZOFFSETFROM:+0000TZOFFSETTO:+ 
0100TZNAME:BSTDTSTART:19160521T020000 

編輯:cuted不必要的行。

我已經使用file_get_contents函數來讀取字符串,並使用preg_match_all函數來獲取與會者列表。

<?php 
    preg_match_all('/mailto:(.*?)(.com|.org|.net|.in)/', $convert, $emails); 
    echo "<pre>"; 
    print_r($emails[0]); 
    echo "</pre>"; 
    ?> 

輸出:

[0] => Array 
     (
      [0] => mailto:[email protected] 
      [1] => mailto:[email protected] 
      [2] => mailto:xxxin 
      [3] => mailto:[email protected] 
      [4] => mailto:[email protected] 
      [5] => mailto:xxxin 
      [6] => mailto:xxxin 
     ) 

預期輸出:

[0] => Array 
     (
      [0] => mailto:[email protected] 
      [1] => mailto:[email protected] 
      [2] => mailto:[email protected] 
      [3] => mailto:[email protected] 
      [4] => mailto:[email protected] 
      [5] => mailto:[email protected] 
      [6] => mailto:[email protected] 
     ) 

請幫我實現這一目標。

回答

2

你的正則表達式是不是找的@符號。

這已經給出了更好的結果:

'/mailto:(.*?)@(.*?)(\.com|\.org|\.net|\.in)/' 

列出頂級域名事實是不是一個好主意。有250多個國家的土地,還有數百個。

您的文件結構有缺陷,它沒有電子郵件的結束分隔符。你必須先解決這個問題。之後,可以編寫一個好的正則表達式解析器。

4

逃生的正則表達式的點:

preg_match_all('/mailto:(.*?)(\.com|\.org|\.net|\.in)/', $convert, $emails); 
相關問題