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

时间:2012-11-21 16:57:52

标签: php regex

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

  $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/>';
}

2 个答案:

答案 0 :(得分:1)

“s”修饰符添加对多行的支持。

你的正则表达式如下:

$motif="/MAIL\s*([a-z]{2,4}).*?NAME\s*([a-z]{2,4})/s";

答案 1 :(得分:1)

我觉得正则表达式可能对你正在做的事情有点过分。

为什么不一行一行地阅读,以空格作为分隔符进行爆炸(文档here),然后检查第一项是“MAIL”,还是“NAME”,然后使用第二项,否则丢弃线?

以下是执行此操作的示例代码:

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";
}