Estrarre righe con regex
In un log con righe INFO, WARN ed ERROR, l'espressione ^ERROR\b tiene solo le 2 righe di errore su 4, invariate e in ordine. Ogni riga viene controllata da sola, quindi un carattere jolly non sconfina mai in quella successiva. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Schema
- ^ERROR\b
- Risultato
- ERROR database unavailable ERROR request timed out
- Corrispondenze
- 2
- Totale righe
- 4
Estragga le righe corrispondenti a un’espressione regolare quando un lungo log, rapporto, dump di configurazione o testo strutturato contiene molte più informazioni del necessario. Fornisca il testo, un pattern regex JavaScript e flag facoltativi: la capacità verifica ogni riga completa e restituisce soltanto le corrispondenze nell’ordine originale. Accetta terminazioni LF, CRLF e CR, conserva il contenuto delle righe selezionate e indica sia il numero di corrispondenze sia il totale esaminato. L’elaborazione è locale e deterministica, senza modelli o dipendenze di rete.
Scriva un pattern per le righe che desidera davvero
Il pattern viene applicato separatamente a ogni riga completa, quindi gli ancoraggi sono particolarmente utili. Inizi con ^ quando l’elemento significativo deve trovarsi all’inizio della riga e termini con $ quando contano i caratteri finali. Per esempio, ^ERROR\b seleziona le normali voci di errore senza accettare un’etichetta come ERRORS, mentre \.csv$ conserva i nomi di file con tale estensione.
Fornisca il sorgente dell’espressione regolare anziché la notazione tra barre: inserisca ^WARN, non /^WARN/. I flag JavaScript facoltativi si indicano separatamente. Il flag i ignora maiuscole e minuscole; gli altri mantengono il significato JavaScript standard.
Ogni riga selezionata viene restituita senza modifiche e conserva la propria posizione relativa. Le righe non corrispondenti scompaiono, ma lo strumento non elimina spazi, riscrive, ordina, deduplica o interpreta il contenuto. Questo contratto ristretto è utile nell’automazione perché produce un sottoinsieme prevedibile della sorgente, non un riepilogo che potrebbe omettere prove importanti.
Filtri log e testo strutturato senza alterare le prove
Il filtraggio per righe è adatto a log applicativi, output di comandi, esportazioni delimitate, rapporti di test e file di configurazione. Un addetto all’assistenza può isolare identificativi di richiesta, codici di stato o livelli di gravità prima di allegare un estratto conciso a un incidente. Uno sviluppatore può conservare le asserzioni fallite di una lunga esecuzione.
Una pipeline operativa può scegliere record i cui timestamp, nomi host o prefissi di componente rispettano una convenzione nota. Poiché la verifica avviene una riga alla volta, un carattere jolly non invade accidentalmente il record successivo. Vengono riconosciuti i confini LF, CRLF di Windows e CR singolo; il testo restituito usa separatori LF stabili affinché i confronti successivi siano coerenti tra piattaforme.
Le righe vuote possono essere selezionate intenzionalmente con ^$. Un ritorno a capo finale è considerato un terminatore, non un record vuoto aggiuntivo. Oltre al risultato unito, la risposta comprende un array delle righe selezionate e i conteggi delle corrispondenze e delle righe totali, offrendo dati comodi e verifiche utili senza un’altra fase di analisi.
Convalidi i pattern e integri il risultato in sicurezza
La capacità rifiuta testo mancante o vuoto, pattern mancanti o vuoti, flag non supportati o duplicati, modalità Unicode incompatibili ed espressioni che il motore JavaScript non riesce a compilare. Una risposta valida senza corrispondenze resta utile: contiene risultato vuoto, array di righe vuoto, conteggio pari a zero e numero di righe controllate. Testo e pattern hanno limiti dimensionali per mantenere prevedibile l’uso della memoria sia sul worker perimetrale sia nel browser gratuito.
Prima dell’integrazione, provi ogni nuova espressione su campioni rappresentativi, usi ancoraggi quando il formato lo consente ed eviti ripetizioni annidate inutilmente ambigue. Senza rete, casualità, orologio o modello linguistico, input identici producono output identici.
Casi d'uso
Isolare le voci di errore
Conservi solo le righe che iniziano con una gravità di errore o contengono un identificativo di richiesta prima dell’analisi dell’incidente.
Selezionare record strutturati
Estragga righe i cui prefissi, stati, nomi di file o identificativi soddisfano un’espressione regolare precisa.
Ridurre l’output dei test
Mantenga asserzioni fallite e marcatori diagnostici di un lungo log di compilazione senza modificarne l’ordine originale.
Domande frequenti
Devo includere le barre attorno all’espressione regolare?
No. Invii soltanto il pattern, come ^ERROR\b. Inserisca flag come i nell’apposito campo separato.
Il pattern viene eseguito su ogni riga o sull’intero testo?
Viene eseguito indipendentemente su ogni riga completa. Una riga viene restituita una sola volta se l’espressione corrisponde in un punto qualsiasi.
Le righe corrispondenti vengono modificate?
No. Caratteri e ordine restano invariati. Solo i separatori del risultato unito vengono normalizzati in LF.
Quanto costa?
Lei può eseguire gratuitamente lo stesso filtraggio deterministico nel browser.
Come si ignora la differenza tra maiuscole e minuscole?
Aggiunga l'opzione i, che si inserisce separatamente dall'espressione. Con questa opzione, ^error tiene anche le righe che iniziano con ERROR o Error. Le altre opzioni comuni delle espressioni regolari mantengono il loro significato abituale.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/str/extract-lines-matching \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out","pattern":"^ERROR\\b"}'const res = await fetch("https://api.kit.forhosting.com/str/extract-lines-matching", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out",
"pattern": "^ERROR\\b"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/extract-lines-matching",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out",
"pattern": "^ERROR\\b"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/extract-lines-matching", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"INFO server started\\nERROR database unavailable\\nWARN retrying\\nERROR request timed out","pattern":"^ERROR\\\\b"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out","pattern":"^ERROR\\b"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/extract-lines-matching", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"text": "INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out",
"pattern": "^ERROR\\b"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.extract_lines_matching",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Usi lo strumento nel browser per un controllo rapido oppure richiami l’API per $0.002 per richiesta riuscita.
Convalidi i pattern e integri il risultato in sicurezza
Questi casi restituiscono invalid_input anziché generare silenziosamente un risultato vuoto, così un errore di battitura in una regola automatizzata si distingue da un pattern valido che non trova nulla. Consumi l’array quando serve JSON strutturato o il risultato unito per passare il testo filtrato a un file, ticket o altro comando. L’automazione API costa $0.002 per richiesta riuscita, mentre il browser è gratuito.
Domande tecniche
Che cosa accade se nessuna riga corrisponde?
La richiesta riesce con risultato e array vuoti, matched_count pari a zero e total_lines con il numero di righe esaminate.