sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #101387
Re: Regexp spørgsmål
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