Seite 1 von 1

Erweiterte Ausnahme bei QRegExp

Verfasst: 23. Februar 2010 19:23
von Nightblizard
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

Verfasst: 23. Februar 2010 19:38
von upsala
Was du suchst ist 'non-greedy':

Code: Alles auswählen

void QRegExp::setMinimal ( bool minimal )

Verfasst: 23. Februar 2010 19:55
von Nightblizard
Wunderschön!

Vielen dank! :)

Verfasst: 23. Februar 2010 21:15
von FaS
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 = '"'; )

Code: Alles auswählen

(?:^|[^\\'])("(?:\\"|\\(?!")|[^\\"])*")
escaped:

Code: Alles auswählen

QRegExp rx( "(?:^|[^\\\\'])(\"(?:\\\\\"|\\\\(?!\")|[^\\\\\"])*\")" );
Gruß,
FaS