检查TXT文件是否有巧合

时间:2012-03-17 14:28:17

标签: php regex

我有一个名为blacklist.txt的txt文件。我需要检查输入的$fullURL或其任何子域是否在文件中,如果不是,请执行一些功能。我已经完成了这段代码,但它始终回应$bannedmsg,我做错了什么?

$blacklist = file("./blacklist.txt"); 
$words = "/.*";
foreach ($blacklist as $zeile){
    if ($zeile == $blacklist[count($blacklist)-1]){
        $words .= trim($zeile);
    }else{
        $words .= trim($zeile);
        $words .= "|";
    }
}  
$words .= ".*/";
preg_match($words, $fullURL, $results);
if(empty($results)){ 
    // Do the function
}else{
    //This is banned, echo $bannedmsg and die()
}

1 个答案:

答案 0 :(得分:1)

在我看来,你正在生成错误的正则表达式。在这种情况下,最好的办法是稍微打开你的程序,然后查看每一步的输入和输出。例如,如果那个foreach循环没有执行(为什么会这样?),你的正则表达式将最终看起来像这样:

/.*.*/

该正则表达式将匹配任何输入。即使找到文件,你可能仍然没有得到你真正想要的东西。在这种情况下,你的正则表达式可能最终看起来像:

/.*url1.com|url2.com|url3.com.*/

这不是你要找的替代品。它将匹配以下所有内容:

  1. url1.com
  2. whitelistedurl1.com
  3. URL1-命令
  4. url3.com.google.com
  5. 匹配 subdomain.url2.com 。一套严格的unit tests对这样的程序非常有帮助。

    最终,你可能希望parans决定你的交替开始和停止的位置(解决url2.com问题),逃避关于正则表达式的黑名单内容(排除(3)),检查结束字符串(排除(4)),以及开头的可选点(排除(2))。像这样:

    /.*\.?(url1\.com|url2\.com|url3\.com)$/
    

    但这只是猜测,不知道你正在处理的格式。同样,最好的方法是对每个组件进行全面测试,至少进行基本的错误检查。