在特定子字符串和分号之间查找电子邮件地址

Find email address between specific substring and semicolon

我想从此字符串中提取电子邮件地址:

ezeze smtp.mailfrom=mymail@gmail.com; rerer

我应该如何在 preg_match 中编写我的正则表达式来查找电子邮件?

您可以试试这个正则表达式模式:

(?<=mailfrom=)[^;]+(?=;)

(?<=mailfrom=) // assert 'mailfrom=' on the left
[^;]+          // 1 or more characters not ';'
(?=;)          // assert ';' on the right

Demo

不需要任何捕获组或环视(这会降低正则表达式引擎的速度)。

Find/Match 起始标记子串,然后“忘记”那些带有 \K 的字符,然后以贪婪的方式匹配所有非分号字符。

代码:(Demo)

$string = 'ezeze smtp.mailfrom=mymail@gmail.com; rerer';

echo preg_match(
         '/smtp\.mailfrom=\K[^;]+/',
         $string,
         $match
     )
     ? $match[0]
     : 'no email address';

输出:

mymail@gmail.com