如何使用regsub在模式tcl之后获取值?

如何使用regsub在模式tcl之后获取值?,tcl,Tcl,如果我有一个值如下的变量: set var "/abc/def/ghi/jkl/mno/pqr" 如何使用regsub,使其删除除最后一个值“mno”之外的所有内容?为什么使用正则表达式? 那么: set val [file tail [file dirname $var]] 参考资料:为什么使用正则表达式? 那么: set val [file tail [file dirname $var]] 参考资料:试试这个,使用split和lindex % set var "/abc/def/gh

如果我有一个值如下的变量:

set var "/abc/def/ghi/jkl/mno/pqr"
如何使用regsub,使其删除除最后一个值“mno”之外的所有内容?

为什么使用正则表达式? 那么:

set val [file tail [file dirname $var]]
参考资料:

为什么使用正则表达式? 那么:

set val [file tail [file dirname $var]]

参考资料:

试试这个,使用
split
lindex

% set var "/abc/def/ghi/jkl/mno/pqr"
/abc/def/ghi/jkl/mno/pqr
% 
% puts "[lindex [split $var "/"] end-1]"
mno

使用
split
lindex

% set var "/abc/def/ghi/jkl/mno/pqr"
/abc/def/ghi/jkl/mno/pqr
% 
% puts "[lindex [split $var "/"] end-1]"
mno
你可以这样做:

set updatedValue [regsub {^.*(mno).*$} $value {\1}]
这是Unix实用程序sed中的一个老把戏,它被翻译成了Tcl。这将删除除最后一个匹配的文本以外的所有内容
mno
。选择合适的答案

请不要用这个来操纵文件名。它可能会工作,但会使代码更加混乱。
file
命令具有用于这类工作的实用程序子命令,它们处理您可能不知道的棘手问题。

好的,您可以这样做:

set updatedValue [regsub {^.*(mno).*$} $value {\1}]
这是Unix实用程序sed中的一个老把戏,它被翻译成了Tcl。这将删除除最后一个匹配的文本以外的所有内容
mno
。选择合适的答案


请不要用这个来操纵文件名。它可能会工作,但会使代码更加混乱。
file
命令具有用于此类工作的实用程序子命令,它们处理您可能不知道的棘手问题。

匹配模式的约束是基于字符串
mno
还是以
/
作为分隔符的最后一个元素?匹配模式的约束是否基于在字符串
mno
或最后第二个元素上使用
/
作为分隔符?