Extraire les lignes avec une regex
Dans un journal avec des lignes INFO, WARN et ERROR, l'expression ^ERROR\b ne garde que les 2 lignes d'erreur sur 4, inchangées et dans l'ordre. Chaque ligne est testée seule, donc un joker ne déborde jamais sur la suivante. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Motif
- ^ERROR\b
- Résultat
- ERROR database unavailable ERROR request timed out
- Correspondances
- 2
- Total de lignes
- 4
Extrayez les lignes correspondant à une expression régulière lorsqu’un long journal, rapport, export de configuration ou texte structuré contient bien plus d’informations que nécessaire. Fournissez le texte, un motif regex JavaScript et des indicateurs facultatifs : la capacité teste chaque ligne complète et renvoie uniquement les correspondances dans leur ordre d’origine. Elle accepte les fins de ligne LF, CRLF et CR, préserve le contenu des lignes retenues et indique le nombre de correspondances ainsi que le total examiné. Le traitement est local et déterministe, sans modèle ni dépendance réseau.
Écrivez un motif ciblant exactement les lignes voulues
Le motif est appliqué séparément à chaque ligne complète, ce qui rend les ancres particulièrement utiles. Commencez par ^ lorsque l’élément pertinent doit se trouver au début, et terminez par $ lorsque les derniers caractères comptent. Par exemple, ^ERROR\b sélectionne les entrées d’erreur conventionnelles sans accepter une étiquette telle que ERRORS, tandis que \.csv$ conserve les noms de fichiers portant cette extension.
Fournissez la source de l’expression régulière et non une notation entre barres : saisissez ^WARN, et non /^WARN/. Les indicateurs JavaScript facultatifs sont transmis séparément. L’indicateur i ignore la casse ; les autres gardent leur sens JavaScript standard.
Chaque ligne retenue est renvoyée sans modification et conserve sa position relative. Les lignes non conformes disparaissent, mais l’outil ne supprime pas les espaces, ne réécrit pas, ne trie pas, ne déduplique pas et n’interprète pas le contenu. Ce contrat précis convient à l’automatisation, car il livre un sous-ensemble prévisible de la source plutôt qu’un résumé susceptible d’omettre une preuve importante.
Filtrez journaux et textes structurés sans altérer les preuves
Le filtrage ligne par ligne convient naturellement aux journaux d’applications, sorties de commandes, exports délimités, rapports de tests et fichiers de configuration. Une équipe d’assistance peut isoler des identifiants de requête, codes d’état ou niveaux de gravité avant de joindre un extrait concis à un incident. Une équipe de développement peut conserver les assertions en échec d’une longue exécution.
Un pipeline d’exploitation peut sélectionner les entrées dont l’horodatage, le nom d’hôte ou le préfixe de composant respecte une convention connue. Comme la recherche porte sur une seule ligne à la fois, un joker ne déborde pas accidentellement sur l’enregistrement suivant. Les séparateurs LF, CRLF de Windows et CR seul sont reconnus ; le texte renvoyé utilise des LF stables afin que les comparaisons restent cohérentes entre plateformes.
Vous pouvez sélectionner volontairement les lignes vides avec ^$. Un saut final est considéré comme un terminateur et non comme une entrée vide supplémentaire. Outre le résultat assemblé, la réponse fournit un tableau des lignes retenues ainsi que les nombres de correspondances et de lignes examinées, sans imposer une nouvelle analyse aux scripts.
Validez les motifs et intégrez le résultat en toute sécurité
La capacité refuse un texte absent ou vide, un motif absent ou vide, des indicateurs non pris en charge ou répétés, des modes Unicode incompatibles et toute expression que le moteur JavaScript ne peut pas compiler. Une réponse sans correspondance reste utile : elle contient un résultat vide, un tableau de lignes vide, un compteur de zéro et le nombre de lignes inspectées. Les tailles du texte et du motif sont limitées pour maintenir une consommation mémoire prévisible dans le traitement en périphérie comme dans le navigateur gratuit.
Avant l’intégration, testez toute nouvelle expression sur des exemples représentatifs, ancrez-la lorsque le format le permet et évitez les répétitions imbriquées inutilement ambiguës. Sans réseau, hasard, horloge ni modèle linguistique, une même entrée donne toujours la même sortie.
Cas d’usage
Isoler les entrées d’erreur
Conservez uniquement les lignes commençant par un niveau d’erreur ou contenant un identifiant de requête avant l’analyse d’un incident.
Sélectionner des enregistrements structurés
Extrayez les lignes dont les préfixes, états, noms de fichiers ou identifiants respectent une expression régulière précise.
Réduire la sortie des tests
Gardez les assertions en échec et les marqueurs de diagnostic d’un long journal de compilation sans modifier leur ordre.
Questions fréquentes
Faut-il placer des barres autour de l’expression régulière ?
Non. Envoyez seulement le motif, par exemple ^ERROR\b. Placez les indicateurs comme i dans le champ prévu à cet effet.
Le motif s’applique-t-il à chaque ligne ou au texte entier ?
Il s’applique indépendamment à chaque ligne complète. Une ligne est renvoyée une fois si l’expression correspond à un emplacement quelconque.
Les lignes correspondantes sont-elles modifiées ?
Non. Leurs caractères et leur ordre sont préservés. Seuls les séparateurs du résultat assemblé sont normalisés en LF.
Quel est le tarif ?
Vous pouvez exécuter gratuitement le même filtrage déterministe dans le navigateur.
Comment ignorer la différence entre majuscules et minuscules ?
Ajoutez l'option i, que vous saisissez à part de l'expression. Avec elle, ^error garde aussi les lignes qui commencent par ERROR ou Error. Les autres options habituelles des expressions régulières gardent leur sens ordinaire.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre 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)Exemple de requête
{
"text": "INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out",
"pattern": "^ERROR\\b"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.extract_lines_matching",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Utilisez l’outil du navigateur pour une recherche rapide ou appelez l’API pour $0.002 par requête réussie.
Validez les motifs et intégrez le résultat en toute sécurité
Ces cas renvoient invalid_input au lieu de produire silencieusement un résultat vide ; une faute dans une règle automatisée se distingue ainsi d’un motif valide qui ne trouve simplement rien. Utilisez le tableau pour obtenir du JSON structuré ou le résultat assemblé pour transmettre le texte filtré à un fichier, un ticket ou une autre commande. L’automatisation API coûte $0.002 par requête réussie ; le navigateur reste gratuit.
Questions techniques
Que se passe-t-il si aucune ligne ne correspond ?
La requête réussit avec un résultat et un tableau vides, matched_count à zéro et total_lines indiquant le nombre de lignes inspectées.