/ / Perl regulärer Ausdruck, um alle außer letzten Vorkommen zu entfernen - regex, perl

Perl regulärer Ausdruck, um alle außer letzten Vorkommen zu entfernen - regex, perl

Ich versuche, die Befehlszeile "Umbenennen" zu verwenden, um einige Dateinamen zu ändern, die mehrere Punkte enthalten. Beispiel: this.is.a.file.name.txt

Nachdem ich mich ein bisschen umgeschaut habe, habe ich einige Beispiele gefunden, die mich fast dorthin bringen, aber ich kann es anscheinend nicht wie gewünscht zur Arbeit bringen. Unnötig zu sagen, ich bin ein sehr grün Anfänger mit Regex.

Ich habe das versucht:

rename -v -n "s/.(.+?)(?=.)//" this.is.a.file.name.txt

Was dazu führt:

this.a.file.name.txt

Ich habe versucht, die Beispiele in den folgenden Ressourcen zu ändern, aber ich stecke fest. PHP Regex: Wählen Sie alle außer letzte Auftreten Regex ersetzt nicht das letzte Vorkommen einer Übereinstimmung

Antworten:

5 für die Antwort № 1

Ihr regulärer Ausdruck ist nicht ganz richtig für eineinige Gründe. Erstens sollte das Ding, das Sie die leere Zeichenfolge ersetzen, nur die Periode sein, während Sie von einem Punkt zu allem passen, was die nächste Periode ist, und das entfernen. Außerdem machst du es nur einmal.

Der reguläre Ausdruck, den Sie möchten, ist /.(?=.*.)//g, die besagt, dass ein Punkt mit einer Breite von null Zeichenfolgen und einer anderen Periode übereinstimmt und dies so oft wie möglich geschieht.