tcl中压缩文件的正则表达式

时间:2016-10-03 09:14:12

标签: regex tcl

我想对路径名做一些regexp并保留它。

我要测试的行是:

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

所以它试图像: regexp {(\S+\.tcl(?:\.gz)?)} $line blank mypath 要么 regexp {(\S+\.tcl(|\.gz))} $line blank mypath

但它似乎不起作用,"似乎保留在$mypath中。 正则表达式有什么问题?

1 个答案:

答案 0 :(得分:1)

关键是\S匹配任何字符但空白,因此它也匹配"

您可以在模式的开头添加一个可选的",但在捕获组的外部添加"?(\S+\.tcl(?:\.gz)?)

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

请参阅Tcl online demo

另一种方法是从"中排除\S,将其替换为带有空格(\s)的反向速记类的否定字符类,并将"添加到[^\s"]中它:([^\s"]+\.tcl(?:\.gz)?)

select a.* from TotalsByGLCenter$ as a
left join TotalsByGLCenter$ as b on a.APSupplierID = b.APSupplierID AND a.Entity=b.Entity and a.ExpenseReportID=b.ExpenseReportID and a.Employee=b.Employee  and a.Amount = -b.Amount
where b.Amount is not null

请参阅regex demo