php - 正则表达式从文本行返回ip地址

Aar*_*cki 5 php regex

我正在尝试使用正则表达式来捕获文本行中的IP地址.现在它有点搞砸了.当文本行不包含ip地址时,我的代码返回ip地址,有时返回"Script".我究竟做错了什么?我想返回实际拥有它们的行的ip地址,如果没有则返回任何内容.

文本

2014-06-02 11:53:54.410 -0700   Information 638 NICOLE  Client "123456" opening a connection from "123456.local (207.230.229.204)" using "Go 13.0.4 [fmapp]".
2014-06-02 11:54:52.504 -0700   Information 98  NICOLE  Client "123456 (123456.local) [207.230.229.204]" closing database "FMServer_Sample" as "Admin".
2014-06-02 12:07:33.433 -0700   Information 638 NICOLE  Client "[WebDirect]" opening a connection from "207.230.229.204 (207.230.229.204)" using "Win Chrome 35.0 [fmwebdirect]".
2014-06-02 13:05:00.088 -0700   Information 638 NICOLE  Client "Showare Update" opening a connection from "FileMaker Script" using "Server 13.0v1 [fmapp]".
2014-06-02 13:05:22.366 -0700   Information 98  NICOLE  Client "Showare Update (FileMaker Script)" closing database "cac" as "opus".
2014-06-02 12:08:04.165 -0700   Information 98  NICOLE  Client "[WebDirect] (207.230.229.204) [207.230.229.204]" closing database "FMServer_Sample" as "Admin".
Run Code Online (Sandbox Code Playgroud)

PHP

if(preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $line, $ip_matches)) {
    $client_ips = $ip_matches[1];
}

print "<pre>;
print_r($client_ips);
print "</pre>";
Run Code Online (Sandbox Code Playgroud)

产量

207.230.229.204
207.230.229.204
207.230.229.204
207.230.229.204
207.230.229.204
Script)
Run Code Online (Sandbox Code Playgroud)

hwn*_*wnd 15

考虑删除^字符串$锚点的开头和字符串锚点的结尾,看看你的IP地址不在你提供的文本中字符串的开头/结尾.

if (preg_match('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/', $line, $ip_match)) {
   echo $ip_match[0];
}
Run Code Online (Sandbox Code Playgroud)

如果您想要所有IP地址,请使用 preg_match_all()

preg_match_all('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/', $line, $ip_matches);
print_r($ip_matches[0]);
Run Code Online (Sandbox Code Playgroud)