Php 括号正则表达式
在php中使用正则表达式如何将每个IP存储到单独的变量中 它将从一个日志文件中抓取如下所示的内容Php 括号正则表达式,php,regex,Php,Regex,在php中使用正则表达式如何将每个IP存储到单独的变量中 它将从一个日志文件中抓取如下所示的内容 1/27/2013 7:34:14 AM Removed {109.104.19.75} 1/27/2013 7:34:16 AM Added {98.119.183.235} 1/27/2013 7:34:17 AM Removed {98.119.183.235} 1/27/2013 7:34:34 AM Added {89.155
1/27/2013 7:34:14 AM Removed {109.104.19.75}
1/27/2013 7:34:16 AM Added {98.119.183.235}
1/27/2013 7:34:17 AM Removed {98.119.183.235}
1/27/2013 7:34:34 AM Added {89.155.107.178}
1/27/2013 7:34:35 AM Removed {89.155.107.178}
此脚本读取日志文件并将IP地址作为数组返回。我建议为此使用数组,因为与单独的变量相比,使用PHP可以更好地处理它:
function readIps($filename, $unique = false) {
$lines = file($filename);
$result = array();
foreach ($lines as $line) {
if (preg_match('/\{([^\}]+)\}$/', $line, $matches)) {
$result[] = $matches[1];
}
}
return $unique ? array_values(array_unique($result)) : $result;
}
如果您确信,此脚本假定在每行末尾的括号之间只列出IP地址。如果不是这样,正则表达式还将匹配IP地址以外的其他内容,并且必须更加特殊
只要用你的文件名来调用它,你就会得到一个IP列表,只要它出现的频率是多少。将第二个参数设置为
true
调用它,您将得到一个列表,其中每个IP只出现一次。它们是否必须位于单独的变量中,为什么不将它们全部存储在一个数组中?只需迭代日志文件中的行(逐行读取),并使用简单的正则表达式提取IP。您可以使用迭代计数器作为键构建IP数组。为什么要把事情弄得更复杂呢;var_dump($b[1]);这里甚至不需要正则表达式。只需简单的子字符串即可。谢谢farmer1992,这正是我所需要的!