loesung fuer uebungsblatt 10 down?

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

loesung fuer uebungsblatt 10 down?
hi,

oben genanntes ps-file existiert nicht - wird das bloss gerade ueberarbeitet oder gibt es das problem laenger? weiss jemand was? und kann vielleicht jemand die datei posten, falls er sie schon mal runtergeladen hat?

thx,
-steppenwolf


das gibt’s schon länger nicht


hmm, das liegt wahrscheinlich daran, dass das diese tolle vim-uebungsaufgabe ist. gemacht hab ich die bis jetzt noch nicht, sollte ich vielleicht mal tun.


mann,
ich krieg diese fickende fuenfte substitution nicht hin!

zeile 78:
* (dir?m[ct->i]//** / gemeiner kommentar 2 /***/[rt->i]:m/ sinnfreier kommenter 3/[rt->i][ct->i]) \

da soll man die kommentare rausschneiden. wie krieg ich das mit einem einzigen vim-kommando hin?
mein letztes ergebnis war:

:78s//*[^(/)]/*//g

in worten:
ersetze in zeile 78 sequenzen,
bei denen am anfang /* steht,
danach beliebige zeichen ausser */
und am schluss */
durch nichts,
ueberall in der zeile.

was zum teufel stimmt da nicht?


das geht nicht, denn charakterklassen matchen immer auf strings länge 1.
du kannst also entweder auf / oder auf * matchen, aber nicht auf ‚/*‘.

huups. gerade selber nen fehler entdeckt … tststs :cool:
son mist …


hmm,
ich hatte gedacht, dass entweder (/) oder [./.] die beiden symbole */ zu einem atom werden lassen. aber das funktioniert eben bei mir nicht…

wie hast du es denn gemacht?


Hi Jungs,

die Loesung lautet

:78s//*.{-1,}*///g

also Matche “/" : /*
Dann beliebige Zeichen, so wenig wie moeglich .{-1,}
Dann (ein neues) "
/”: */

Vielleicht ist es ganz nett anzumerken, dass in der Zeile keine ineinander verschachtelten Kommentare vorkommen, weil dies im Sinne von TheoInf dazu fuehren wuerde, dass man sie mit einem regulaeren Automaten nicht mehr erkennen koennte. Aber so passt ja alles :wink:


hi,
vielen dank erstmal!

koenntest du diesen schritt vielleicht ein bisschen genauer erklaeren? also, was das nach dem punkt im einzelnen bedeutet (die gesamtbedeutung hast du ja dazugeschrieben)?


cool, das funktioniert :smiley:

das problem ist, dass in ViM der * nur greedy arbeitet, also soviele zeichen wie möglich schluckt. das ist hier natürlich unerwünscht, denn dann verwischt in der zeile die kommentargrenze. mit {-1,} sagst du ihm, dass er non-greedy matchen soll, sowenige zeichen wie möglich. ich hatte gedacht, ViM kann das net :cry:

dein ansatz mit den zeichenklassen geht schon in die richtung, nur hast du dann das problem, dass eine zeichenklasse eben ein zeichen darstellt aus einer menge und nicht zwei zeichen hintereinander. dafür gibts auch ne lösung … bin leider ebenfalls zu xxx die re dazu zu schreiben:

/*
lookbehind: hinter mir darf kein */ sein
*/

würde das gleiche verhalten erzeugen. :cool:


Ich habe die Zeile auch nur aus der vim-Hilfe. Bei „:help regex“ kommt unter anderem (in etwa) das folgende:

Man kann also die Anzahl der Treffer des davor genannten Zeichens einschraenken, und da es sich bei . um ein beliebiges Zeichen handelt, wird mit {-1,} also der Gesamt-Match minimiert.

Streng genommen waere also {-} noch korrekter gewesen als das vorhin gepostete {-1,}, aber was solls :wink:

Viele Gruesse,
Christian