Seite 1 von 1

QRegExp

Verfasst: Freitag 25. Januar 2008, 20:00
von PNS-Richi
Hallo,

in PyQT gibt es ein Syntax Highlighting Beispiel. Mit diesem Beispiel konnte ich schon einiges für mein Programm lösen, aber nicht alles.

z.b.: $text = "test" . "test"

Code: Alles auswählen

...
        quotationFormat = QtGui.QTextCharFormat()
        quotationFormat.setForeground(QtGui.QColor("#B01111"))
        self.highlighter.addMapping("\".*\"", quotationFormat)
        self.highlighter.addMapping("\'.*\'", quotationFormat)
...
Die Klammern und der Inhalt sollte nun Rot sein. Ist er auch. Nur das zwischen Stück mit dem Punkt ist auch Rot(ist ja auch klar).

Da ich mit RegExp nicht gut umgehen kann, weiß ich nicht was damit möglich ist und wo die Grenzen sind. Sollte ich es nicht mit RegExp schaffen gibt es noch umständlichere Methoden(wie mans nimmt...).

Was ich gerne noch mit RegExp schaffen würde, wenns möglich ist:

function blub { <- Klammer Gelb

} <- Klammer Gelb

Beispiel2:
function blub { <- rot

function blub2 { <- gelb

} <- gelb

Also wenn er 2 mal { ohne auch 2 abschließende } findet soll er das erste Rot einfärben.

lg Richi

Verfasst: Freitag 25. Januar 2008, 20:13
von EyDu
Reguläre ausdrücke werden normalerweise "greedy" ausgewertet, soll heissen, dass sie so viele Zeichen matchen wie irgendwie möglich.

Code: Alles auswählen

'".*"'
bedeutet dann, dass möglichst alles zwischen zwei Anführungszeichen gelesen werden soll. In Python kannst du dem Ausdruck mitteilen, dass er nicht greedy arbeiten soll:

Code: Alles auswählen

'".*?"'
Jetzt wird nur bis zum ersten Lerzeichen gematch. Alternativ kannst du das Anführungszeichen auch aus den zu matchenden Zeichen ausschließen:

Code: Alles auswählen

'"[^"]*"'
.

Verfasst: Freitag 25. Januar 2008, 22:19
von PNS-Richi
Vielen Dank - Funktioniert wunderbar :)

Nur wie mach ich folgendes -> " test \"blub\""?

Er soll dabei \" ignorieren.

lg Richi