Parsing e Testo Avanzato Aggiornato: 21/08/2026

Log Apache Combined (IP, Timestamp, Status, URL)

Estrae con gruppi nominati i campi chiave da una riga di log web in formato Apache/Nginx Combined Log Format.

Risposta diretta

A cosa serve e come si usa questa regex?

Estrae con gruppi nominati i campi chiave da una riga di log web in formato Apache/Nginx Combined Log Format.

Espressione Regolare (Pattern)

Flag consigliati: nessuno · Motori compatibili: JavaScript moderno, PCRE/PHP, Python, Go, .NET
Testa
^(?<ip>\S+)\s+\S+\s+(?<user>\S+)\s+\[(?<time>[^\]]+)\]\s+"(?<method>[A-Z]+)\s+(?<url>\S+)\s+(?<proto>[^"]+)"\s+(?<status>\d{3})\s+(?<bytes>\S+)

Integrazione nel codice

Snippet pronti all'uso
// JavaScript (ES6+)
const regex = /^(?<ip>\S+)\s+\S+\s+(?<user>\S+)\s+\[(?<time>[^\]]+)\]\s+"(?<method>[A-Z]+)\s+(?<url>\S+)\s+(?<proto>[^"]+)"\s+(?<status>\d{3})\s+(?<bytes>\S+)/;
const isValid = regex.test(text);

// Estrazione match
const matches = text.match(regex);
<?php
// PHP 8.2+ (PCRE)
$pattern = '~^(?<ip>\S+)\s+\S+\s+(?<user>\S+)\s+\[(?<time>[^\]]+)\]\s+"(?<method>[A-Z]+)\s+(?<url>\S+)\s+(?<proto>[^"]+)"\s+(?<status>\d{3})\s+(?<bytes>\S+)~';
$isValid = (bool) preg_match($pattern, $text);

// Estrazione con gruppi
if (preg_match($pattern, $text, $matches)) {
    print_r($matches);
}
# Python 3 (re)
import re

pattern = r"^(?<ip>\S+)\s+\S+\s+(?<user>\S+)\s+\[(?<time>[^\]]+)\]\s+\"(?<method>[A-Z]+)\s+(?<url>\S+)\s+(?<proto>[^\"]+)\"\s+(?<status>\d{3})\s+(?<bytes>\S+)"
is_valid = bool(re.search(pattern, text))

# Estrazione match
match = re.search(pattern, text)
if match:
    print(match.group(0))
// Go (regexp)
package main

import (
	"fmt"
	"regexp"
)

func main() {
	re := regexp.MustCompile(`^(?<ip>\S+)\s+\S+\s+(?<user>\S+)\s+\[(?<time>[^\]]+)\]\s+"(?<method>[A-Z]+)\s+(?<url>\S+)\s+(?<proto>[^"]+)"\s+(?<status>\d{3})\s+(?<bytes>\S+)`)
	isValid := re.MatchString(text)
	fmt.Println(isValid)
}
// C# (.NET)
using System;
using System.Text.RegularExpressions;

bool isValid = Regex.IsMatch(text, @"^(?<ip>\S+)\s+\S+\s+(?<user>\S+)\s+\[(?<time>[^\]]+)\]\s+""(?<method>[A-Z]+)\s+(?<url>\S+)\s+(?<proto>[^""]+)""\s+(?<status>\d{3})\s+(?<bytes>\S+)");

Come funziona (Spiegazione dettagliata)

  1. (?<ip>\S+) gruppo ip: estrae l’indirizzo IP client.
  2. (?<user>\S+) gruppo user: estrae l’utente autenticato o -.
  3. (?<time>[^\]]+) gruppo time: estrae il timestamp tra parentesi quadre.
  4. (?<method>[A-Z]+) gruppo method: metodo HTTP (GET, POST, ecc.).
  5. (?<url>\S+) gruppo url: percorso richiesto.
  6. (?<status>\d{3}) gruppo status: codice di stato HTTP numerico.

Casi d’uso consigliati

  • Analisi log di traffico web e monitoraggio anomalie
  • Pipeline ETL e import su Elasticsearch/ClickHouse
  • Rilevamento tentativi di attacco o brute force

Esempi che corrispondono (Validi)

2 test passati
192.168.1.10 - admin [21/Aug/2026:14:32:10 +0200] "GET /index.php HTTP/1.1" 200 4520
10.0.0.1 - - [21/Aug/2026:14:35:00 +0200] "POST /api/login HTTP/2.0" 401 128

Esempi rifiutati (Non validi)

2 test respinti
Riga di log malformata senza campi standard
Testo generico 12345 non log

Limiti tecnici e avvertenze

  • Il Combined Log Format completo include anche Referer e User-Agent tra virgolette a fine riga.
Verifica empirica

Hai bisogno di collaudare questo pattern con i tuoi dati?

Apri il tester sandboxato con questa regex già caricata e verifica i gruppi di cattura.

Apri nel tester