<?php
$s = file_get_contents("data/a.txt"); //文件1
$p = file_get_contents("data/b.txt"); //文件2// 把文件2的内容处理成正则表达式的规则串
$p = str_replace(".","\\.",$p);
$p = str_replace("*",".*",$p);
$p = str_replace("@",".+@",$p);
$pattern = split("[\r\n]+",$p);
if(empty($pattern[count($pattern)-1]))
  array_pop($pattern);
$pattern = join("|",$pattern);// 匹配文件1的内容
preg_match_all("/$pattern/",$s,$regs);// 查看被找到的邮件地址
print_r($regs[0]);
?>

解决方案 »

  1.   

    <?
    $email_text = "
    [email protected]
    [email protected]
    [email protected]
    ";
    $email_pattern = "
    @hot*.com
    @ww.com
    @*.aa.bb
    ";
    preg_match_all("(@[\w\-\.\*]+)",$email_pattern,$arr);
    $pattern_arr = str_replace(array(".","*"),array("\\.","[\\w\\-]+"),$arr[0]);$pattern = "/(([\w\-]+)((".implode(")|(",$pattern_arr).")))(\s+|$)/is";
    preg_match_all($pattern,$email_text,$r_arr);
    echo "<xmp>";print_r($r_arr[1]);echo "</xmp>";
    ?>
      

  2.   

    文件2存放着一定的规则,文件2中的规则如下:
    @hot*.com
    @ww.com
    @*.aa.bb
    其中*代表1到多个字符,@前面的字符任意这些规则有问题啊。而且*代表的是0到多个,+代表的是1到多个。
      

  3.   

    效率是个问题:
    $pattern = "/(([\w\-]+)((".implode(")|(",$pattern_arr).")))(\s+|$)/is";
    =>
    $pattern = "/([\w\-]+(".implode("|",$pattern_arr)."))(\s+|$)/is";效率高一些
      

  4.   

    phplover的做法中如果是[email protected],得到的地址是[email protected]
      

  5.   

    xuzuning的做法中如果是文件2中有“/”字符,例如@*.aa/bb会出现
    Warning: Unknown modifier 'j' ....
    谢谢各位的指点。
      

  6.   

    改成:
    $pattern = "/([\w\-\.]+(".implode("|",$pattern_arr)."))(\s+|$)/is";很少见到邮箱账号允许.出现的