如何从 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
我有这样一段文字:
(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