Php 匹配文件中的任何行

Php 匹配文件中的任何行,php,regex,Php,Regex,我不知道如何读取文件并拉出符合PHP标准的3个IP。我试着使用explode,但那会破坏所有的空间。。。。非常感谢我在这方面能得到的任何帮助: [May 7 16:30:08] NOTICE[5311] chan_sip.c: Registration from '"507" <sip:507@145.155.214.146:5060>' failed for '195.154.53.90:5068' - Wrong password [May 7 16:30:48] NOTIC

我不知道如何读取文件并拉出符合PHP标准的3个IP。我试着使用explode,但那会破坏所有的空间。。。。非常感谢我在这方面能得到的任何帮助:

[May  7 16:30:08] NOTICE[5311] chan_sip.c: Registration from '"507" <sip:507@145.155.214.146:5060>' failed for '195.154.53.90:5068' - Wrong password
[May  7 16:30:48] NOTICE[5311] chan_sip.c: Registration from '"557" <sip:557@145.155.214.146:5060>' failed for '195.154.53.90:5087' - Wrong password
[May  7 16:31:26] NOTICE[5311] chan_sip.c: Registration from '"107" <sip:107@145.155.214.146:5060>' failed for '195.154.53.90:5107' - Wrong password
[May  7 16:31:43] NOTICE[5311] chan_sip.c: Registration from '"907" <sip:907@145.155.214.146:5060>' failed for '195.154.53.90:5084' - Wrong password
[May  7 16:31:58] NOTICE[5311] chan_sip.c: Registration from '"407" <sip:407@145.155.214.146:5060>' failed for '195.154.53.90:5101' - Wrong password
[May  7 16:32:17] NOTICE[5311] chan_sip.c: Registration from '"207" <sip:207@145.155.214.146:5060>' failed for '195.154.53.90:5083' - Wrong password
[May  7 16:32:31] NOTICE[5311] chan_sip.c: Registration from '"7" <sip:7@145.155.214.146:5060>' failed for '195.154.53.90:5113' - Wrong password
[May  7 16:32:57] NOTICE[5311] chan_sip.c: Registration from '"307" <sip:307@145.155.214.146:5060>' failed for '195.154.53.90:5117' - Wrong password
我只是想把
$ip
附加到
195.154.53.90

$ip=$search[]

我可能会为此感到后悔,但事情是这样的:

$ip = '195.154.53.90';
$result = preg_grep(preg_quote("/$ip/"), file('/var/log/asterisk/messages'));

print_r($result);
根据注释,要在找到
195.154.53.90:5068
的位置查找任何IP(用单引号括起来):


以下代码将为文本提取
失败后的IP:

$lines = explode("\n", file_get_contents("/var/log/asterisk/messages"));
$ips = array_filter(array_map(function($item) {
    $matches = [];
    if(preg_match($item, "/'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):\d+'/")) {
        return $matches[1];
    }
    return false;
}, $lines), function($item) {
    return $item !== false;
});
上面的代码首先将日志文件拆分为单独的行,然后将这些行映射到正则表达式匹配的结果,然后if过滤掉不包含IP的日志行


如果您需要IP的以下
,我倾向于使用exec调用grep。有时操作系统会为作业提供beast函数。为什么尝试
readfile()
?你读过函数的文档了吗?至少在它失败之后-在这里发布之前-你应该这样做-1标准是什么?你想找到包含
195.154.53.90
的行吗?@Cristik我想在该文件中找到任何ip地址…并将其分配给$ipthanks。为此,我实际上想取出ip。。不搜索ip。。。你能帮我把它颠倒过来吗?编辑:给@Cristik a+1,虽然有点复杂。谢谢你,但是我在第4行得到了
PHP解析错误:语法错误,意外的“{
”-我正在寻找IP,因为我使用了
preg\u match\u all(“/for”(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}):\d{1,3}):\d{d+/”,
以拔出篡改IP。
preg_match_all("/'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):\d+'/",
               file_get_contents('/var/log/asterisk/messages'),
               $ip);

print_r($ip[1]);
$lines = explode("\n", file_get_contents("/var/log/asterisk/messages"));
$ips = array_filter(array_map(function($item) {
    $matches = [];
    if(preg_match($item, "/'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):\d+'/")) {
        return $matches[1];
    }
    return false;
}, $lines), function($item) {
    return $item !== false;
});