按特定顺序执行的PHP正则表达式


PHP regex performed in a specific order

我有一堆这样的电子邮件地址

smtp:nickp@office.email.com
smtp:nick@mailtrack.com
smtp:nick.p@email.com
SMTP:nick@email.com
smtp:nicholas@email.com

我需要做一些我认为需要按特定顺序完成的事情。基本上,我首先需要检查smtp,因为尽管我没有在上面显示它,但数据中有一些不好的行。我只需要以email.com结尾的邮件。

真的,我想我应该先用大写的SMTP。我要找的输出是这个

nick: nick@relay.email.com
nick.p: nick@relay.email.com
nicholas: nick@relay.email.com

也许这将帮助你更好地理解它

$email_prefix_from_SMTP: email_prefix_from_SMTP@relay.email.com
$email_prefix_from_smtp: email_prefix_from_SMTP@relay.email.com
$email_prefix_from_smtp: email_prefix_from_SMTP@relay.email.com

所以电子邮件将永远是相同的,这是大写SMTP + relay.email.com的前缀。

冒号前的信息将是单个smtp的电子邮件前缀。我现在有的是这个

if(preg_match_all('/smtp:(.*?@email'.com)$/im', $email, $matches)) {
    foreach($matches[1] as $match) {
        $emailPrefix = substr($match, 0, strpos($match, '@'));
        print_r($emailPrefix . ": " . $emailPrefix . "@relay.email.com" . "<br>");
    }             
}

冒号前的数据是正确的,但是电子邮件地址不一样。

我如何以我所描述的方式输出数据?

谢谢

为什么稍后再搜索前缀?你可以直接把它分成几个部分:

$email = "smtp:nickp@office.email.com
smtp:nick@mailtrack.com
smtp:nick.p@email.com
SMTP: nick@email.com
smtp:nicholas@email.com";
preg_match_all("/^(.+):'s*('S*)@(email'.com)$/igm", $email, $matches);
foreach($matches as $match)
{
    print_r($match[1] . ": " . $match[2] . "@relay.email.com" . "<br>");
}

请注意,我还没有测试这段代码到现在…regex本身应该可以工作,但您可以了解其余部分。