如何从 sql 导出文本中提取符合条件的电子邮件?

How to extract qualifying emails from sql export text?

我有这样一段文字:

(2843, '', 0, '', '', '', '', 'mail@yahoo.gr', '', ''),
(2844, '', 0, '', '', '', '', 'mail1@washpost.com', '', ''),
(2845, '', 0, '', '', '', '', 'someMail@gmail.com', '', ''),
(2846, '', 0, '', '', '', '', 'else@gmail.gov', '', ''),

如何提取所有以 .gov 结尾的电子邮件地址?

我想要一串以逗号分隔的值作为结果。像这样:

else@gmail.gov,nextElse@gmail.gov
  preg_match("/[\w.+\-]+@gmail\.gov/", $input, $output);

$output 将包含所有匹配的电子邮件。然后在 PHP 中,您可以使用 for 循环获取并在电子邮件之间附加逗号。

编辑

$str = "(2843, '', 0, '', '', '', '', 'mail@yahoo.gr', '', ''),
(2844, '', 0, '', '', '', '', 'mail1@gmail.gov', '', ''),
(2845, '', 0, '', '', '', '', 'someMail@gmail.gov', '', ''),
(2846, '', 0, '', '', '', '', 'else@gmail.gov', '', '')";

preg_match_all("/[\w.+\-]+@gmail.gov/", $str, $output);

$final_str="";
foreach($output[0] as $email){
    $final_str .= $email.",";
}   
$final_str = rtrim($final_str,","); //Remove last comma
echo $final_str;

输出: mail1@gmail.gov,someMail@gmail.gov,else@gmail.gov

根据您的样本输入和您的标准,这将告诉正则表达式您的意图:

/[^']+\.gov(?=')/

匹配所有非撇号字符后跟 .gov 后跟(不捕获)'.

然后用逗号内爆输出数组。

或更少的步骤:

/^(?:[^,]*, ){7}'\K[^']+\.gov(?=')/m

模式演示:https://regex101.com/r/nmNjZb/1/

这将从每行的开头开始更准确地匹配。

代码:(演示:https://3v4l.org/por3g

$csv="(2843, '', 0, '', '', '', '', 'mail@yahoo.gr', '', ''),
(2844, '', 0, '', '', '', '', 'mail1@washpost.com', '', ''),
(2845, '', 0, '', '', '', '', 'someMail@gmail.com', '', ''),
(2846, '', 0, '', '', '', '', 'else@gmail.gov', '', ''),
(2846, '', 0, '', '', '', '', 'nextElse@gmail.gov', '', '')";
echo implode(',',preg_match_all("/^(?:[^,]*, ){7}'\K[^']+\.gov(?=')/m",$csv,$out)?$out[0]:[]);

输出:

else@gmail.gov,nextElse@gmail.gov