sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #101388
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