$pattern2 = "/([A-Za-z0-9\.\-\_\!\#\$\%\&\'\*\+\/\=\?\^\`\{\|\}]+)\@([A-Za-z0-9.-_]+)(\.[A-Za-z]{2,5})/";
foreach ($lines as $email) {
preg_match($pattern2,$email,$goodies);
$goodies[0]=filter_var($goodies[0], FILTER_SANITIZE_EMAIL);
if(filter_var($goodies[0], FILTER_VALIDATE_EMAIL)){
array_push($good,$goodies[0]);
}
}
我从textarea中的旧平面文件中粘贴了大量数据,试图抓取这些电子邮件。
一切正常,它可以很好地提取电子邮件。模式2是我尝试过的唯一一个足以让我工作的模式。
问题是我在错误日志中得到一个未定义的偏移量。在第一个goodies[0]
出现的行。
我将所有goodies[0]
更改为goodies['0']
,我收到了未定义的索引错误。
我已经尝试了几个小时来解决这个问题,而且我在我的智慧结束。
提前感谢能为我解决此事的任何人!
答案 0 :(得分:1)
我仍然不明白。我应该这样做 一个if preg_match来避免这种情况吗?
是的 - 这样做(或在$ goodies数组上运行isset())将是解决问题的唯一方法。
$pattern2 = "/([A-Za-z0-9\.\-\_\!\#\$\%\&\'\*\+\/\=\?\^\`\{\|\}]+)\@([A-Za-z0-9.-_]+)(\.[A-Za-z]{2,5})/";
foreach ($lines as $email) {
if( preg_match($pattern2,$email,$goodies) ) {
$goodies[0]=filter_var($goodies[0], FILTER_SANITIZE_EMAIL);
if(filter_var($goodies[0], FILTER_VALIDATE_EMAIL)){
array_push($good,$goodies[0]);
}
}
}