括号正则表达式php

时间:2013-01-27 13:41:24

标签: php regex

在php中使用regex如何将每个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}

1 个答案:

答案 0 :(得分: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仅发生一次。