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

Re: kleines RegEx Problem



On Wednesday 24 May 2006 03:06, Andreas Pakulat wrote:
> Hi,
>
> hab hier ein klitzekleines RegEx-Problem.
>
> Gegeben sein ein String der Dateinamen enthaelt wie sie in Debian
> Archiven vorkommen koennen (also z.B. foobar_version_arch.deb,
> foobar_version.orig.tar.gz, foobar_version.tar.gz).
>
> Ich moechte nun mit einer Regex darauf matchen, folgende regex macht
> fast was sie soll:
>
> '^([^_]+)_([^_]+)(_.+)*(\.orig\.tar\.gz|\.tar\.gz|\.diff\.gz|\.dsc|\.
>deb|\.udeb|\.package|\.source)$'
>
> Das Problem dabei: Bei foobar_version.orig.tar.gz erhalte ich fuer
>
> \1 = foobar
> \2 = version.orig
> \3 = tar.gz
>
> Das Problem: Ich kann keine weiteren Einschraenkungen in Gruppe 2
> machen, da sowohl Buchstaben als auch . dort erlaubt sind. Ich
> muesste also irgendwie ausdruecken, dass orig.tar.gz "Vorrang" vor
> tar.gz hat. Nur da verlassen sie mich halt, so ein Regex-Guru bin ich
> leider nicht

Also, wenn mich meine Kenntnisse der Theoretischen Informatik nicht ganz 
im Stich lassen ist das, was du semantisch möchtest, nicht machbar. 
Weil es sich nicht mehr mit einer regulären Sprache (und damit 
endlichem Automat bzw. regExp) erschlagen lassen kann.
Dein Problem liegt an dem zweiten Ausdruck, dort würde in einem 
Automaten ein Lookup (oder Kellerspeicher beim PushDown Automat) 
benötigt, um zu entscheiden ob ich im gleichen Zustand beim Lesen von 
\. bleibe oder in den nächsten gehe.
Korrekt beweisen kann ich dir das allerdings nicht, dafür ist die 
Thematik für mich zulange her ;)

Da du aber selbst Informatik studierst, kannst du das ja selbst am 
Lehrstuhl Grundlagen der Theoretischen Informatik oder ähnlich 
nachrecherchieren ;) 

MfG
Markus Schulz

-- 
> > Ich kann warten.
> Du bist noch jung?
Ich komme langsam in das Alter, in dem man zwar das warten gelernt, aber
nicht mehr viel Zeit hat ;-)



Reply to: