php Regex的电子邮件地址

时间:2015-09-29 13:35:32

标签: php regex

尝试过滤掉某些特定的电子邮件地址。我运行一个返回数据的查询

smtp:email@email.local
X400:C=GB;A= ;P=TRACK;O=Exchange;
SMTP:email@email.com

smtp:Email.4c1f4d8b-8179-4148-93bf-00a95fa1e042@email.com
X400:c=GB;a= ;p=TRACK;o=Exchange;s=Email.4c1f4d8b-8179-4148-93bf-0;
smtp:Email.4c1f4d8b-8179-4148-93bf-00a95fa1e042@email.co.uk
smtp:Email.4c1f4d8b-8179-4148-93bf-00a95fa1e042@email.local

X400:c=GB;a= ;p=TRACK;o=Exchange;s=Mailbox D919BA05-46A6-415;
SMTP:Mailbox{D919BA05-46A6-415f-80AD-7E09334BB852}@email.com
smtp:Mailbox{D919BA05-46A6-415f-80AD-7E09334BB852}@email.co.uk
smtp:Mailbox{D919BA05-46A6-415f-80AD-7E09334BB852}@email.local

我需要返回的是"正常"电子邮件地址。所以从上面我需要返回

smtp:email@email.local
SMTP:email@email.com

首先,我需要摆脱任何不以smtp / SMTP开头的东西。异常电子邮件地址在@符号前有3个或连字符。我以为我可以用它来摆脱糟糕的电子邮件地址。

我尝试过那种有用的东西,但我认为这不是最好的。我拥有的是

/smtp:\w+(-\w+)?@.*/im

什么是从我的列表中获取好电子邮件地址的最佳方式?

由于

2 个答案:

答案 0 :(得分:1)

看看这对你的真实案例是否有效:

    <MyAttributes>
        <MyAttribute User = "CLASS_FROM_1" System = "CLASS1FROM"/>
        <MyAttribute User = "CLASS_FROM_2" System = "CLASS2FROM"/>
        <MyAttribute User = "CODE_FROM_2" System = "CODE2FROM"/>
    </Attributes>

答案 1 :(得分:1)

如果您想要捕获所有兼容RFC 822的电子邮件地址,请考虑使用此正则表达式:

/smtp:([^][()<>@,;:\\\\\". \\x00-\\x1F\\x7F]+|\"(\\n|(\\\\\\r)*([^\"\\\\\\r\\n]|\\\\[^\\r]))*(\\\\\\r)*\")(\\.([^][()<>@,;:\\\\\". \\x00-\\x1F\\x7F]+|\"(\\n|(\\\\\\r)*([^\"\\\\\\r\\n]|\\\\[^\\r]))*(\\\\\\r)*\"))*@([^][()<>@,;:\\\\\". \\x00-\\x1F\\x7F]+|\\[(\\n|(\\\\\\r)*([^][\\\\\\r\\n]|\\\\[^\\r]))*(\\\\\\r)*])(\\.([^][()<>@,;:\\\\\". \\x00-\\x1F\\x7F]+|\\[(\\n|(\\\\\\r)*([^][\\\\\\r\\n]|\\\\[^\\r]))*(\\\\\\r)*]))*/im

这意味着您的代码看起来像这样:

$pattern = "/smtp:([^][()<>@,;:\\\\\". \\x00-\\x1F\\x7F]+|\"(\\n|(\\\\\\r)*([^\"\\\\\\r\\n]|\\\\[^\\r]))*(\\\\\\r)*\")(\\.([^][()<>@,;:\\\\\". \\x00-\\x1F\\x7F]+|\"(\\n|(\\\\\\r)*([^\"\\\\\\r\\n]|\\\\[^\\r]))*(\\\\\\r)*\"))*@([^][()<>@,;:\\\\\". \\x00-\\x1F\\x7F]+|\\[(\\n|(\\\\\\r)*([^][\\\\\\r\\n]|\\\\[^\\r]))*(\\\\\\r)*])(\\.([^][()<>@,;:\\\\\". \\x00-\\x1F\\x7F]+|\\[(\\n|(\\\\\\r)*([^][\\\\\\r\\n]|\\\\[^\\r]))*(\\\\\\r)*]))*/im";

preg_match_all($pattern, $emails, $matches);
var_dump($matches[1]);