Hallo, Markus Schulz wrote: > Am Montag, 16. April 2007 15:15 schrieb Michael Welle: >> Hallo, >> >> Frank Küster <frank@debian.org> writes: >>> Goran <xamiw@arcor.de> wrote: >> [...] >> >>> Im Prinzip mit Negation in bracket expressions, siehe regex(7): >>> >>> s/[^;]*;[^;]*;\([^;]*\);.*/\1/ >>> >>> ergibt den Inhalt zwischen zweitem und drittem Semikolon. Für 26 >>> möchte ich das allerdings nicht schreiben (oder gar lesen) müssen. >>> Da empfehle ich eher was mit einer komplexeren Skriptsprache (Perl, >>> Python,... je nach Geschmack) oder einfach cut: >> /^\([^;]*;\)\{26\}xx;.*$/d > > @OP: > alle diese Lösungen "hoffen" übrigens, das zwischen 2 Semikolons > kein "gequotetes" Semikolon (z.B. ..;"xx;yy";..) steht. Falls das > vorkommen kann, wird es nämlich schwierig, da es nicht mehr als > regulärer Ausdruck (nichtmal mehr kontextfrei) geschrieben werden kann. > > Vielleicht lässt es sich mit den Perl Regex-Erweiterungen (non-greedy > und co. die ja mehr als reguläre Sprachen erfassen) doch bauen. Ja, es gibt z.B. in Regexp::Common eine regex für "delimited strings", sodass man sowas wie ([^;]|$RE{delimited}{-delim=>'"'}) für die Zwischenräume schreiben kann. Wenn die Anführungszeichen nicht escaped werden können (also "foo\"bar" nicht erlaubt ist), kann man auch sowas wie ([^;]|"[^"]*?") mit non-greedy-Quantifiern schreiben ;-) > Vielleicht weiß dazu ja einer der Perl Experten mehr. Ich vermute aber, > das hier selbst Perl (mit nur einer Regex) aussteigt. Seitdem ich weiß, dass man XML mit Perl-Regexen validieren kann [1], glaube ich keine Aussage der Form "Mit Perl-Regexen kann man $foo nicht machen" mehr ;-) [1] Ich habe die Regex nicht gesehen, aber die wurde wohl als Test für die Regex-Engine von Perl geschrieben. Was sie genau kann, weiß ich leider nicht. Grüße, Moritz -- Moritz Lenz http://moritz.faui2k3.org/ - http://sudokugarden.de/ - http://perl-6.de/
Attachment:
signature.asc
Description: OpenPGP digital signature