2016-08-08 14 views
1

Ich baue einen Log-Parser in Dart. Wie kann ich die dart regex-Bibliothek verwenden, um übereinstimmende Werte abzurufen?Regex mit Dart lang

dieses link Mit meiner regex zu überprüfen, ist alles in Ordnung wih wie folgt zusammen:

  • Regex: (?<suffix>^.*m)(?<time>\d{1,2}:\d{1,2}:\d{1,2},\d{1,3}) (?<level>[^\s]+) (?<message>.*)
  • Input: [0m [31m22: 25: 57.366 ERROR [org.jboss.msc.service .fail] (MSC-Dienstthread 1-8) MSC000001: Der Dienst jboss.deployment.unit konnte nicht gestartet werden. "bad.war".

diese Werte eingeben gibt Ihnen: Suffix, Zeit, Stufe und Nachricht

ich nicht in der Lage bin zu meinem regulären Ausdruck mit der Dart Bibliothek zu verwenden.

+0

Was wäre ein gültiger Wert? –

+0

Versuchen Sie http://regexr.com/ Dart unterstützt nur, was JS RegExp unterstützt, um xxxToJS transpilable zu sein. –

+0

Verwenden Sie nummerierte Fanggruppen: ['^ (. * M) (\ d {1,2}: \ d {1,2}: \ d {1,2}, \ d {1,3}) ([^ \ s] +) (. *) '] (https://regex101.com/r/rR3xG8/1) und greife mit Zahlenindexen darauf zu. –

Antwort

2

Sie können keine benannten Gruppen in der JS-ähnlichen Regex wie in Dart verwenden.

Verwenden nummerierte Gruppen Erfassung und Zugriff auf sie durch ihre Indizes:

RegExp regExp = new RegExp(r"^(.*m)(\d{1,2}:\d{1,2}:\d{1,2},\d{1,3}) ([^\s]+) (.*)"); 

Sehen Sie diese regex demo

In Dart, versuchen, etwas wie folgt aus:

RegExp regExp = new RegExp(r"^(.*m)(\d{1,2}:\d{1,2}:\d{1,2},\d{1,3}) ([^\s]+) (.*)"); 
String s = "[0m[31m22:25:57,366 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-8) MSC000001: Failed to start service jboss.deployment.unit.\"bad.war\""; 
Iterable<Match> matches = regExp.allMatches(s); 
for (Match match in matches) { 
    print("${match.group(1)}\n"); 
    print("${match.group(2)}\n"); 
    print("${match.group(3)}\n"); 
    print("${match.group(4)}\n"); 
} 

See this DartPad demo

+0

Danke. Es ist in Ordnung. Ich habe ein Dartpad-Beispiel erstellt, um die Lösung zu teilen https://dartpad.dartlang.org/0bd2244aa9e93c300282d269f2eda0be – bwnyasse

+0

Oh, ich habe den Kommentar nicht gesehen, bevor ich mein Beispiel postete :) Ich bin froh, dass du einen Weg schneller gefunden hast. Ich hatte nur ein paar Probleme mit der Demo-Arbeit auf dem Dart-Pad. –