Hi,
ich arbeite nun schon etwas länger an einem Editor mit Syntax Hervorhebung, doch jetzt habe ich ein Problem mit der Expression zum Hervorheben von Strings.
Ich benutze folgenden Code:
QRegExp("\".*\"");
Das funktioniert zwar einwandfrei, jedoch wird hier nicht zwischen Start und Ende des Stringes unterschieden, so dass eine Zeile mit mehreren Strings so aussieht:
"Str1" text "Str2" text "Str3"
Gewünscht ist aber das:
"Str1" text "Str2" text "Str3"
Kann man das auch definieren, oder werde ich hier auf eine Schleife zurück greifen müssen (was ich aber gerne vermeiden würde)?
Danke,
Night
Erweiterte Ausnahme bei QRegExp
-
Nightblizard
- Beiträge: 39
- Registriert: 7. Oktober 2009 20:32
Was du suchst ist 'non-greedy':
Code: Alles auswählen
void QRegExp::setMinimal ( bool minimal )Oder [^\"]* statt .* um " auszuschließen, dann kann es greedy bleiben.
Oder folgendes, wenn zusätzlich \" ignoriert werden soll und " nicht als Textanfang gesehen werden soll, falls es direkt einem ' folgt (char c = '"'; )
escaped:
Gruß,
FaS
Oder folgendes, wenn zusätzlich \" ignoriert werden soll und " nicht als Textanfang gesehen werden soll, falls es direkt einem ' folgt (char c = '"'; )
Code: Alles auswählen
(?:^|[^\\'])("(?:\\"|\\(?!")|[^\\"])*")Code: Alles auswählen
QRegExp rx( "(?:^|[^\\\\'])(\"(?:\\\\\"|\\\\(?!\")|[^\\\\\"])*\")" );FaS