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 リストが出現するたびに、出現するたびにリストが取得されます。2 番目のパラメーターを に設定して呼び出すと、trueすべての IP が 1 回だけ発生するリストが取得されます。

于 2013-01-27T14:06:21.063 に答える