Php preg_match_all正在输出一个空白数组

Php preg_match_all正在输出一个空白数组,php,arrays,regex,Php,Arrays,Regex,我试图从日志文件中提取ip地址,但得到的是一个空数组 代码: 范例 $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'; 我在测试了模式,它只突出显示了上面字符串的ip地址 preg_match_all能否接受数组中的值?我在php文档中没有看到任何与

我试图从日志文件中提取ip地址,但得到的是一个空数组

代码:

范例

$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';
我在测试了模式,它只突出显示了上面字符串的ip地址

preg_match_all能否接受数组中的值?我在php文档中没有看到任何与此相关的内容

我只是去掉了所有的过滤逻辑,脚本就工作了,显然文件中用来去除行的过滤器正在去除所有行。脸红$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 
您的代码:

$file = file('log.txt');
$ips = implode($fixed);
应该是:

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

我在那个网站上测试时,你的正则表达式不起作用。但是它是用一个``而不是``工作的。你已经测试过了吗?或者你可以使用单引号
'~[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}.
双转义应该被解析成带有双引号的单引号。如果没有,那将是一个问题。事实上,当我试图将代码放入stackoverflow.com时,它在预览时没有反斜杠,我尝试使用单个转义字符,并且我尝试使用~而不是反斜杠作为分隔符。我在zach saws便携式php服务器上使用PHP4.3.8。我查看了php的网站,网站上说preg_match_all适用于4以上的版本。我也在phpfiddle.org上试用了你的代码,现在效果很好。你已经检查过$ips的内容了吗?$fixed是一个数组,它有一个数组映射函数和一个if语句来过滤掉我不需要的ip地址。我开始怀疑preg_match_all是否会被额外的空间挤得喘不过气来…@Lid:Pleaser,编辑你的问题,以获得一个可复制的示例。添加一个
print\r($ips)
我添加了print\r($ips)的输出,脚本现在工作正常,必须通过过滤功能修复一些比较逻辑。我是一个regex初学者,所以我觉得这有点不对劲。
$file = file('log.txt');
$ips = implode($file);
//              ^^^^