# basename /Path/zur/Datei/ist/hier/einfach/viel/zu/lang/dateiname.txt
dateiname.txt
File file = new File(string);
String name = file.getName();
Zinnwurm schrieb:Regex kann sowas natürlich.
10 Leute, 11 Lösungen. XDCode:/.*\/(.+)$/
Wobei das (.+)$ überflüssig ist. Perl, sed usw. suchen alle meines wissens nach automatisch nach dem längstmöglichen Treffer. Also genügt:Zinnwurm schrieb:Regex kann sowas natürlich.
Code:/.*\/(.+)$/
/.*\//
#.*/#
notoxp schrieb:Wobei das (.+)$ überflüssig ist. Perl, sed usw. suchen alle meines wissens nach automatisch nach dem längstmöglichen Treffer.Zinnwurm schrieb:Regex kann sowas natürlich.
Code:/.*\/(.+)$/
Greedy ist doch genau das, was gewünscht ist. Ich wollte mich nur nicht soweit aus dem Fenster lehnen, dass ALLE Sprachen, die RegExp unterstützen standardmäßig gierig sind.TeXpert schrieb:ja, bei perl kannst Du zwar noch mit nongreedy-Optionen arbeiten aber sed kann das AFAIK nicht. (daher muss man bei sed auch so häufig zu negationen greifen )
hier ja, ich wollte Dir ja auch nur recht gebennotoxp schrieb:Greedy ist doch genau das, was gewünscht ist.
Ich wollte mich nur nicht soweit aus dem Fenster lehnen, dass ALLE Sprachen, die RegExp unterstützen standardmäßig gierig sind.
Ich kenne nämlich nicht alle, aber mitlerweile weiß ich, dass auch PHP sich wie beschrieben verhält.
Also, folgende Befehle liefern genau das gleiche Ergebnis. Oben ist deine RegExp, unten ist meine.Zinnwurm schrieb:(darum war bei mir auch das (.+) drin, denn dann kann man den Tei rausreferenzieren. ^^)
Natürlich kann man den sich ergebenden String auch noch vom Original "abziehen", aber dann bräuchte man zwei Arbeitsschritte.
echo /dir/verz/dir/verz/datei | sed 's/.*\/\(.*\)$/\1/'
echo /dir/verz/dir/verz/datei | sed 's#.*/##'