我在文件中有以下字符串。
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:aaa@aaa.comATTENDEE;
RSVP=TRUE:mailto:bbb@aaa.comATTENDEE;RSVP=TRUE:mailto:xxxin@yahoo.inATTENDEE;
RSVP=TRUE:mailto:test.test@test.orgATTENDEE;RSVP=TRUE:mailto:xxx@xxx.mailgun.orgORGANIZER;
CN=Sherin jemima G;SENT-
BY="mailto:xxxin@yahoo.in":mailto:xxxin@yahoo.inTRANSP: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
编辑:不必要的线路。
我使用了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:aaa@aaa.com
[1] => mailto:bbb@bbb.com
[2] => mailto:xxxin
[3] => mailto:test.test@test.org
[4] => mailto:xxx@xxx.mailgun.org
[5] => mailto:xxxin
[6] => mailto:xxxin
)
预期产出:
[0] => Array
(
[0] => mailto:aaa@aaa.com
[1] => mailto:bbb@bbb.com
[2] => mailto:xxxin@yahoo.in
[3] => mailto:test.test@test.org
[4] => mailto:xxx@xxx.mailgun.org
[5] => mailto:xxxin@yahoo.in
[6] => mailto:xxxin@yahoo.in
)
请帮助我实现这一目标。
答案 0 :(得分:4)
逃离正则表达式中的点:
preg_match_all('/mailto:(.*?)(\.com|\.org|\.net|\.in)/', $convert, $emails);
答案 1 :(得分:2)
您的正则表达式不是在寻找@符号。
这已经提供了更好的结果:
'/mailto:(.*?)@(.*?)(\.com|\.org|\.net|\.in)/'
列出顶级域名的事实并不是一个好主意。有超过250个国家的tlds,数百个即将到来。
您的文件结构存在缺陷,它没有电子邮件的结束分隔符。你必须先解决这个问题。之后,就可以编写一个好的正则表达式解析器。