/ / regexp auf komprimierte Dateien in tcl - regex, tcl

Regexp auf komprimierte Dateien in Tcl - Regex, Tcl

Ich möchte einige Pfadnamen regexpieren und behalten.

Meine zu testenden Zeilen sind wie folgt:

"/home/tclshell/test.tcl.gz" "/home/tclshell/test1.tcl" /home/tclshell/test.tcl

So traute es Dinge wie: regexp {(S+.tcl(?:.gz)?)} $line blank mypath oder regexp {(S+.tcl(|.gz))} $line blank mypath

Aber es scheint nicht zu funktionieren " scheint in gehalten zu werden $mypath. Was ist falsch in der Regexp?

Antworten:

1 für die Antwort № 1

Der Punkt ist, dass S passt auf ein beliebiges Zeichen, aber auf Leerzeichen, damit es auch übereinstimmt ".

Sie können ein optionales hinzufügen " am Anfang des Musters, aber außerhalb der einfangenden Gruppe - "?(S+.tcl(?:.gz)?):

set line ""/home/tclshell/test.tcl.gz""
regexp {"?(S+.tcl(?:.gz)?)} $line blank mypath
puts $mypath

Sehen Tcl Online-Demo

Ein anderer Weg ist das Ausschließen der " von S indem Sie es durch eine negierte Zeichenklasse mit umgekehrter Kurzschreibeklasse für Leerzeichen ersetzen (s) und Hinzufügen der " hinein: [^s"]:

([^s"]+.tcl(?:.gz)?)

Siehe die Regex-Demo