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: