/ / regexp na skompresowanych plikach w tcl - regex, tcl

regexp na skompresowanych plikach w tcl - regex, tcl

Chcę zrobić regexp na nazwach ścieżek i zachować go.

Moje wiersze do przetestowania są następujące:

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

więc wypróbował takie rzeczy jak: regexp {(S+.tcl(?:.gz)?)} $line blank mypath lub regexp {(S+.tcl(|.gz))} $line blank mypath

Ale nie wydaje się działać, " wydaje się być trzymany $mypath. Co jest nie tak w regexp?

Odpowiedzi:

1 dla odpowiedzi № 1

Chodzi o to, że S dopasowuje dowolny znak, ale białe spacje, więc również pasuje ".

Możesz dodać opcjonalne " na początku wzorca, ale ouside grupy przechwytującej - "?(S+.tcl(?:.gz)?):

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

Widzieć Demo Tcl online

Innym sposobem jest wykluczenie " od S poprzez zastąpienie go negowaną klasą znaków z odwróconą stenogramem dla białych znaków (s) i dodanie " w tym: [^s"]:

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

Zobacz regex demo