bwnyasse bwnyasse - 1 year ago 147
Dart Question

Regex using Dart lang

I'm building a log parser in dart. How can I use dart regex library to retrieve matching values.

Using this link to check my regex, everything is ok wih the following :

  • 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 [] (MSC service thread 1-8) MSC000001: Failed to start service jboss.deployment.unit."bad.war".

Entering these values will give you : suffix, time , level and message

I'm not able to use my regex with the dart library.

Answer Source

You cannot use named groups in the JS-like regex like in Dart.

Use numbered capturing groups and access them by their indices:

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

See this regex demo

In Dart, try something like this:

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 [] (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) {

See this DartPad demo

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download