我正在尝试使用正则表达式来捕获文本行中的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)