[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Suche nach RegEx für sed



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


Reply to: