Text Parsing Ausdrücke
Die Aufgabe des Parsing Ausdrucks ist dazu, eine Liste benannter Werte (Schlüssel / Wert-Paare) für den gegebenen Text bereitzustellen. Diese Felder ermöglichen eine spätere Nachrichtenfilterung und können auch als Zähler oder Statusobjekte behandelt werden. Für jeden Ausdruck muss die Liste der Variablen deklariert werden, die vom Ausdruck zurückgegeben werden.
Komma-getrennte Werte
Das ist wahrscheinlich das einfache Format zum Parsen. Variablennamen beschreiben jede Spalte und das Standardtrennzeichen ist das Komma.
Key Value Pairs
Schlüsselwertpaare
Dieses Format ist nützlich, wenn Daten als eine Reihe von Schlüssel / Wert-Paaren codiert sind, die durch ein zusätzliches Trennzeichen getrennt sind. Beispielsweise:
from:John;val:10
In diesem Fall wäre Paar-Trennzeichen ; und Werttrennzeichen :
Ein anderes Beispiel kann ini* encoding sein:
speed=10
acceleration=0
In diesem Fall wäre Paar-Trennzeichen \ n und Werttrennzeichen=
Regulärer Ausdruck
Reguläre Ausdrücke sind sehr stark und nützlich beim Mustervergleich. NetCrunch verwendet die Javascript-Implementierung des regulären Ausdrucks und vergleicht die Variable mit der Reihenfolge übereinstimmender Gruppen.
Beispiel - Log4J-Protokollformat
Wir haben ein reguläres Muster für ein beliebtes Log4J-Format erstellt.
(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2},\d{3}) \[(.*?)\] ([^ ]*) +([^ ]*) - (.*)$
Welche wir folgenden Variablen (Feldern) zugeordnet haben
- Datum
- Zeit
- Thread
- Schweregrad
- Modul
- Nachricht
Apache Common Log Format
Dies ermöglicht die einfache Decodierung von Apache-Protokollen im Common Log Format. Sie müssen nur das Format angeben, das für die Konfiguration des angegebenen Protokolls verwendet wird.
[Weitere Informationen finden Sie in der Apache-Dokumentation] (https://httpd.apache.org/docs/1.3/logs.html#common)
XPath / DOM-Selektoren
NetCrunch unterstützt XML-Pfade zum Abrufen von Daten aus XML. Es werden nur Pfade unterstützt, die einzelne Werte zurückgeben.
Beispiel
<doc>
<amount>10.2</amount>
<user name="John" id="123"/>
</doc>
Wir können alle Variablen über folgende Pfade extrahieren:
/doc/amount//user/@name//user/@id
Bedingte Selektoren
Sie können das Attribut des Elements auswählen, indem Sie das Knotenelement mit einem anderen Attribut auswählen. In unserem Beispiel könnten wir den Namen des Benutzers erhalten, indem wir das Element anhand seiner ID auswählen.
//doc/user[@id='123']/@name
DOM Selektoren
Der XPath-Ausdruck unterstützt auch DOM-Selektoren (auch bekannt als CSS-Selektoren). Sie können sie zum Auswählen von Knotenwerten verwenden. Wenn Sie jedoch einen Attributwert benötigen, können Sie dies nicht über den Standard-CSS-Selektor angeben. Deshalb haben wir die Syntax um das '|' Pipe-Zeichen ergänzt, das Sie den Attributnamen hinzufügen können.
Der folgende Pfad erzeugt also dasselbe Ergebnis wie die obigen XPaths.
doc > amountuser|nameuser|id
JSON-Pfad
NetCrunch unterstützt JSON-Pfadpfade zum Abrufen von Daten aus JSON-Daten. Es werden nur Pfade unterstützt, die einzelne Werte zurückgeben.
Beispiel
{
"doc" : {
"amount": 22,
"user" : {
"name" : "John",
"id" : 100
}
}
}
Wir können alle Variablen über folgende Pfade extrahieren:
$.doc.amount$..user.name$..user.id
Javascript
Javascript ist die ultimative Lösung, um die Daten zu knacken, da Sie reguläre Ausdrücke und die gesamte Leistungsfähigkeit des Javascript-Engines (V8), die den neuesten Sprachstandard implementiert, verwenden können. Ihr Skript wird im strikten Modus in einer separaten und sandboxed NodeJS -Engine ausgeführt und wird beendet, wenn es das Zeitlimit überschreitet.
Die Eingabe
Skripteingabe ist in text Variable.
Die Ausgabe
Als Ergebnis des Skripts erwartet NetCrunch, dass die result-Variable ein Objekt mit Eigenschaften ist, die den deklarierten Variablen (Feldern) entsprechen.
Beispiel
Stellen wir uns vor, dass wir eine E-Mail mit JSON erhalten. Es wird ziemlich einfach sein, Javascript zu verwenden, um Daten zu extrahieren, die wir brauchen,
Test Text
{
"probe_1" : {
"temp" : 10
}
}
Variablen
- Temperatur
Das Skript
const data = JSON.parse(text);
result = {
temperature : data.probe_1.temp
}