URL: https://www.overclockers.at/coding-stuff/s_regular_expression_160166/page_1 - zur Vollversion wechseln!
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?
Mit Lookbehinds moeglich, z. B.
Code:echo 'foo "bar1\"bar2\"bar" foo "bar3"' | perl -n -e '@match = /(?<!\\)"(.*?)(?<!\\)"/g; print @match'
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.
Danke für die Tips! Ich glaub jetzt tuts...
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025