Erweiterte Ausnahme bei QRegExp

Alles rund um die Programmierung mit Qt
Antworten
Nightblizard
Beiträge: 39
Registriert: 7. Oktober 2009 20:32

Erweiterte Ausnahme bei QRegExp

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Was du suchst ist 'non-greedy':

Code: Alles auswählen

void QRegExp::setMinimal ( bool minimal )
Nightblizard
Beiträge: 39
Registriert: 7. Oktober 2009 20:32

Beitrag von Nightblizard »

Wunderschön!

Vielen dank! :)
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag 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
Antworten