猿问

从长文本中提取电子邮件(PHP)

我必须找到从网页源代码中提取电子邮件地址的方法。


    $str=  "<a h=ref=3D.mailto:rys@adres.pl.><img src=3D.http://www.lowiecki.pl/img/list.gif=

        . border=3D.0.></a></td><td class=3D.bb.>

        $a = preg_split( "/ [:] /", $str )";

    for($i=0;$i<count($a);$i++)

        echo $a[$i];

我试过了,但我不知道如何对子字符串“pl”设置限制。


梵蒂冈之花
浏览 113回答 2
2回答

芜湖不芜

电子邮件地址可能比我们习惯的形式复杂得多,请参阅不常见的有效地址示例。在https://emailregex.com/上提出了一个几乎完美但非常复杂的正则表达式,用于匹配大多数电子邮件地址形式。您可以使用这个更短但更具限制性的表达式,该表达式源自 Jan Goyvaerts 在https://www.regular-expressions.info/email.html上提出的一个表达式:/\b[A-Z0-9][A-Z0-9._%+-]{0,63}@(?:[A-Z0-9-]{1,63}\.){1,125}[A-Z]{2,63}\b/i在 PHP 脚本中,可以这样实现:<?php$str = "<a h=ref=3D.mailto:rys@adres.pl.><img src=3D.http://www.lowiecki.pl/img/list.gif=&nbsp; &nbsp; &nbsp; &nbsp; . border=3D.0.></a></td><td class=3D.bb.><a h=ref=3D.mailto:second-address@example.com.>foo</a>";preg_match_all(&nbsp; &nbsp; '/\b[A-Z0-9][A-Z0-9._%+-]{0,63}@(?:[A-Z0-9-]{1,63}\.){1,125}[A-Z]{2,63}\b/i', # After https://www.regular-expressions.info/email.html&nbsp; &nbsp; quoted_printable_decode($str), # An e-mail address may be corrupted by the quoted-printable encoding.&nbsp; &nbsp; $matches);echo isset($matches[0]) ? '<pre>'.print_r($matches[0], true).'</pre>' : 'No address found.';?>该脚本输出:Array(&nbsp; &nbsp; [0] => rys@adres.pl&nbsp; &nbsp; [1] => second-address@example.com)请务必致电$matches[0]以获取找到的地址。

鸿蒙传说

接下来的代码将搜索一封电子邮件并将其保存到一个变量中,之后您可以根据需要使用结果。$email = preg_match_all(&nbsp; "/[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}/i",&nbsp; $str,&nbsp; $listofemails);if($email) {&nbsp; &nbsp;echo "you got a match";}
随时随地看视频慕课网APP
我要回答