2017-01-22 2 views
0

Ich schreibe einen einfachen Konfigurationsdateiparser in C++ 11 und möchte eine Regex verwenden, um die Schlüssel = Wert-Paare aus einer Textdatei auszuwählen. Ich möchte Kommentare in dieser Datei unterstützen, die mit einem # Symbol gekennzeichnet sind. Bisher habe ich folgendes:Regex: Ignoriere nachfolgende Leerzeichen in der Erfassungsgruppe

^(\w+)\s*=\s*([^#]+) 

Dies entspricht einem alphanumerischen Parameternamen am Anfang der Zeile beginnen, ermöglicht optional Leerzeichen um das Zeichen = und dann alles fängt bis zu einem Kommentar Symbol. Das scheint ganz gut zu funktionieren, mit Ausnahme in dem folgende Beispiel:

PARAM_1 = Test mit Kommentar # Kommentar

Die zweite Erfassungsgruppe fängt die Leerzeichen zwischen dem Ende des Parameterwertes und dem Symbol #. Gibt es überhaupt eine Möglichkeit, dass ich in der zweiten Capturing Group alle nachfolgenden Leerzeichen ignorieren kann?

+0

Welche Sprache/welches Werkzeug benutzen Sie? –

+0

Ich benutze C++ 11 und Std :: Regex_search – rozzy

Antwort

1

Diese Regex funktioniert mit Ihrem Beispiel:

^(\w+)\s*=\s*([^#\n]+?)\s*(?=#|$) 

Es ist Ihre ursprüngliche regex, veränderte nicht für die zweite Gruppe gierig zu sein, und Spiel bis Whitespaces, bevor ein # oder End-of-line gefunden werden.

Here ist ein Beispiel.

+0

Das funktioniert gut, danke! – rozzy

Verwandte Themen