我有一个像这样的文本块:
(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
答案 0 :(得分:0)
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
答案 1 :(得分:0)
根据您的示例输入和您的标准,这将告诉正则表达您的意图:
/[^']+\.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