首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:从数据文件中提取电子邮件和名称

PHP:从数据文件中提取电子邮件和名称
EN

Stack Overflow用户
提问于 2012-11-22 00:57:52
回答 2查看 182关注 0票数 1

我需要从一个数据文件中提取姓名和电子邮件。这个文件包含超过500行,我想提取这两个信息,几乎所有的数据。我想使用preg_match_all,但我的函数不起作用...

代码语言:javascript
复制
  $chaine =
"  -----------------
11/21/12 16:06:54 tcp static-qvn-qvt-127041
MAIL toto1@web.com
NAME tata1
 -----------------
11/21/12 16:06:54 tcp static-qvn-qvt-127041
MAIL toto2@web.com
NAME tata2
 *  -----------------
11/21/12 16:06:54 tcp static-qvn-qvt-127041
MAIL toto3@web.com
NAME tata3
";

//$chaine =" #76:50#89:1#86:50#49:1#84:22";
$motif="/MAIL([a-z]{2,4}+)NAME([a-z]{2,4}+)/";
preg_match_all($motif,$chaine,$out);
$nb=count($out[0]);
for($i=0;$i<$nb;$i++)
{
    echo $out[0][$i].'<br/>';
}
EN

回答 2

Stack Overflow用户

发布于 2012-11-22 01:16:27

"s“修饰符增加了对多行的支持。

您的regexp将如下所示:

代码语言:javascript
复制
$motif="/MAIL\s*([a-z]{2,4}).*?NAME\s*([a-z]{2,4})/s";
票数 1
EN

Stack Overflow用户

发布于 2012-11-22 01:16:40

我觉得正则表达式对于您正在做的事情来说可能有点过头了。

为什么不简单地逐行阅读,以空格为分隔符分解(documentation here),然后检查第一项是否为“邮件”,或者如果是"NAME",则使用第二项,否则丢弃该行?

下面是一个完成此任务的示例代码:

代码语言:javascript
复制
foreach(preg_split("/((\r?\n)|(\r\n?))/", $chaine) as $line)
{
    $segments = explode(' ', $line);
    if($segments[0] === "MAIL")
        echo "Found mail " . $segments[1] . "\n";
    elseif($segments[0] === "NAME")
        echo "Found name " . $segments[1] . "\n";
} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13498234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档