2016-02-15 26 views
2

我想从一个日志文件中提取出IP地址,并得到一个空数组。preg_match_all正在输出一个空数组

代码:

$file = file('log.txt'); 
$ips = implode($fixed); 

$pattern2 = "/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/";  
preg_match_all($pattern2, $ips, $m); 
print_r($m[0]); 

$ips='http://localhost/articles/ Mozilla/5.0 (Windows NT 6.3; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0 /articles/ 2-9-2016 17:55 24.100.248.111'; 

我在http://tryphpregex.com/测试图案和它突出正好与上面的字符串的IP地址。

也可以preg_match_all接受数组中的值吗?我没有看到任何有关PHP的文档。

我只是采取了所有的过滤逻辑和脚本的作品,显然文件中的过滤器摆脱线条摆脱了所有的线。 blush。的$ IPS输出是

Array 
    (
    [15] => Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2044.98679/172.56.35.178 

    [16] => http://localhost/ Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2044.98679 /articles/automate-it-all/ 172.56.35.178 
+0

当我测试了它在该网站上您的正则表达式不起作用。但它使用单个'\'而不是'\\'。你测试过了吗? – Tekay37

+0

或者您可以使用单引号''〜[0-9] {1,3} \。[0-9] {1,3} \。[0-9] {1,3} \。[0- 9] {1,3}〜''双重转义应该用双引号解析为单个转义。如果没有,那将是一个问题。 – sln

+0

其实当我试图把代码放入stackoverflow.com它是预览没有反斜杠,我试过它与单个转义字符 – Lid

回答

1

您的代码:

$file = file('log.txt'); 
$ips = implode($fixed); 

应该是:

$file = file('log.txt'); 
$ips = implode($file); 
//    ^^^^ 
+0

$ fixed是一个数组,它有一个数组映射函数完成它和一个if语句来过滤掉我不需要的IP地址我开始怀疑preg_match_all是否在额外的空间上窒息... – Lid

+0

@Lid:Pleasr,编辑你的问题到有一个可重现的例子。添加一个'print_r($ ips)' – Toto

+0

我添加了print_r($ ips)的输出,现在脚本工作正常,必须通过过滤函数来修复一些比较逻辑。正则表达式初学者,所以我认为这是有问题的。 – Lid