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

Re: kleines RegEx Problem



Andreas Pakulat <apaku@gmx.de> wrote:

> '^([^_]+)_([^_]+)(_.+)*(\.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

Ich sehe da vier subexpressions, aber bei der dritten fehlen mir
brackets? 

> 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
> :-(
>
> Jemand nen Tipp wie ich das mit einer regex erschlagen kann (mit
> mehreren ist es kein Problem, das stoert dann aber im Progamm etwas)?

Du verwendest ein Programm, das sich entsprechend regex(7) verhält, ja?
In Perl kann man nämlich das Matching non-greedy machen - das würde
helfen.  Ansonsten habe ich keine Idee, außer dass man vielleicht die
OR's (also '|') anders schachteln könnte, so à la

(($match_auf_version)(orig.tar.gz))|(($match_auf_version)(tar.gz))

Irgendwie so.

Gruß, Frank
-- 
Frank Küster
Single Molecule Spectroscopy, Protein Folding @ Inst. f. Biochemie, Univ. Zürich
Debian Developer (teTeX)



Reply to: