0

在 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.107.178}
1/27/2013 7:34:35 AM Removed        {89.155.107.178}
4

1 回答 1

1

此脚本读取您的日志文件并将 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 仅出现一次。

于 2013-01-27T14:06:21.063 回答