S: Regular Expression
DJ_Cyberdance 15.03.2006 - 11:36 530 3
DJ_Cyberdance
Here to stay
|
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
AdministratorGNUltra
|
Mit Lookbehinds moeglich, z. B. echo 'foo "bar1\"bar2\"bar" foo "bar3"' | perl -n -e '@match = /(?<!\\)"(.*?)(?<!\\)"/g; print @match'
|
Spikx
My Little Pwny
|
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
|
Danke für die Tips! Ich glaub jetzt tuts...
|