Ich habePattern Match auf/xxx/xxx/xxx
$w="/fold1/fold2/qwerty.h"
Ich möchte schneiden /qwerty.h und erhalten/fold1/fold2
Ich versuchte
$w=~s/\/.+\.h\z//; and $w=~s/\/.+?\.h\z//;
aber diejenigen, Entferne die ganze Zeichenfolge.
$w=~s/\/\w+\.h\z//;
funktioniert, aber angenommen, ich habe qwe \ rty.h anstelle von qwerty.h. Das wird nicht wieder funktionieren.
http://perldoc.perl.org/File/Basename.html – Mat
Können Sie das Modul File :: Basename verwenden? –
Wenn ich mich mit Mustern befasse, die einen Schrägstrich enthalten, verwende ich gerne {}, um [lehnendes Zahnstocher-Syndrom] zu vermeiden (http://en.wikipedia.org/wiki/Leaning_toothpick_syndrome#Pattern_example). So würde 'm/foo \/bar /' 'm {foo/bar}'. Ebenso würde 's/foo \/bar/qux \/baz /' zu 's {foo/bar} {qux/baz}'. Das kann fast alles sein: 'm! Foo! ist auch erlaubt. Wenn das Trennzeichen Teil eines Öffnen/Schließen-Paares ist, wird dieses Paar verwendet. Dies ist dokumentiert in [perlretut] (http://perldoc.perl.org/perlretut.html#Simple-word-matching). –