← Back to team overview

sslug-teknik team mailing list archive

Re: Regexp spørgsmål (LØST)

 

Nummer 2 var lige hvad de skulle til.
Og ja, hvis du har en path som "test1/test2/test4/../../test4" skal den
vist køres 2 gange.
Jeg gentager den indtil der ikke er flere matches på den.

Tusind tak :)

Mvh
Asbjørn
On 28-02-2011 16:33, Peter Makholm wrote:
> Asbjorn Grandt <asbjorn@xxxxxxxxxx> writes:
>
>> Så jeg mangler en regexp expression der matcher "/.+?/../" men som
>> undlader "/../../" og helst uden det første / hvis muligt. Men jeg har
>> ingen anelse om hvordan det gøres.
> Jeg er ikke helt klar over hvad det præcist er du vil, men har du set på
> noget negative look-behind?
>
> Det vil sige noget ala "(?<!/..)/../"?
>
> Senere skriver du om normalisering af paths. Det kode jeg pljer at cargo
> culte til den slags gør cirka sådan her:
>
>     $path =~ s|/{2,}|/|g;                         # xx////xx  -> xx/xx
>     $path =~ s!/[^/]+/\.\.(/|$)!/!g;              # xx/../yy/ -> yy/
>     $path =~ s{(?:/\.)+(?:/|\z)}{/}g;             # xx/././xx -> xx/xx
>     $path =~ s|^(?:\./)+||s unless $path eq "./"; # ./xx      -> xx
>     $path =~ s|^/(?:\.\./)+|/|;                   # /../../xx -> xx
>     $path =~ s|^/\.\.$|/|;                        # /..       -> /
>     $path =~ s|/\z|| unless $path eq "/";         # xx/       -> xx
>
> Men som alt andet cargo cultet kode så indeholder det en fejl. Regl 2
> bør udføres indtil den ikke matcher længere.
>
> Gad vide om det leder til sjove fejl i vores system...
>
> //Makholm
>
>
>
>


Follow ups

References