← Back to team overview

sslug-teknik team mailing list archive

Re: Regexp spørgsmål

 

Ok, jeg var måske lidt for hurtig.
Det ser ud til at med nummer 2, bliver f.eks. "../../../../../test"
reduceret til "../test"
Hvilket er forkert. Men det er stadig markant bedre end det jeg havde.

Mvh
Arbjørn Grandt

On 28-02-2011 17:05, Asbjorn Grandt wrote:
> 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
>>
>>
>>
>>
>
>
>


References