"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

S: Regular Expression

DJ_Cyberdance 15.03.2006 - 11:36 529 3
Posts

DJ_Cyberdance

Here to stay
Avatar
Registered: Jun 2002
Location: Vesterålen
Posts: 1838
Vielleicht hat ja jemand von euch mehr Ahnung von regulären Ausdrücken als ich? Ich suche einen regulären Ausdruck (C-Syntax), der Strings matcht. Mein Versuch dazu:

\".*\"

Funktioniert - allerdings wenn ich das nun darauf anwende:

foo1 "bar1" foo2 "bar2"

dann erhalte ich

"bar1" foo2 "bar2"

als Ergebnis. Nächster Schritt:

\"[^\"]*\"

Nun matcht das in obigem Beispiel richtigerweise "bar1" und "bar2". Nun mein Problem: Strings können aber auch Anführungszeichen enthalten - die sind dann mit \ escaped und sollen Teil des Strings sein. Das heißt, wenn ich den gesuchten regulären Ausdruck auf

foo "bar1\"bar2\"" foo "bar3"

anwende, möcht ich als Ergebnis "bar1\"bar2\"" bzw "bar3" haben. Wie geht das? Probier schon ewig rum, kriegs aber einfach nicht hin. Hat jemand eine Idee?

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
Mit Lookbehinds moeglich, z. B.
Code:
echo 'foo "bar1\"bar2\"bar" foo "bar3"' | perl -n -e '@match = /(?<!\\)"(.*?)(?<!\\)"/g; print @match' 

Spikx

My Little Pwny
Avatar
Registered: Jan 2002
Location: Scotland
Posts: 13504
Ich weiß zwar nicht wie sehr sich flex von lex unterscheidet, aber im flex manual is unter punkt '0.11 Start conditions' ein Beispiel um quoted strings zu matchen.

DJ_Cyberdance

Here to stay
Avatar
Registered: Jun 2002
Location: Vesterålen
Posts: 1838
Danke für die Tips! Ich glaub jetzt tuts...
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz