Regex 使用tcl正则表达式提取字符串的开头部分

Regex 使用tcl正则表达式提取字符串的开头部分,regex,tcl,Regex,Tcl,我试图提取字符串的开始部分,直到最后一个“.”,如下所示。在下面的示例中,我需要获得$sig作为abcd.q。请帮忙 % set a abcd.q.alpha abcd.q.bist % regexp "^(.*)\..*$" $a match sig 1 % puts $sig abcd.q.bis 谢谢你的回复。我想出了解决办法: regexp "(.*)\[\.\].*$" $a match 表达式的问题在于,^(.*)\..*$没有执行您可能希

我试图提取字符串的开始部分,直到最后一个“.”,如下所示。在下面的示例中,我需要获得$sig作为abcd.q。请帮忙

% set a abcd.q.alpha
abcd.q.bist
% regexp "^(.*)\..*$" $a match sig
1
% puts $sig
abcd.q.bis

谢谢你的回复。我想出了解决办法:

regexp "(.*)\[\.\].*$" $a match

表达式的问题在于,
^(.*)\..*$
没有执行您可能希望它执行的操作。更具体地说,
\.
实际上只是被转换成了一个简单的
,这就是为什么除了最后一个字符之外,您还得到了所有字符。在Tcl中,最好对正则表达式使用大括号,如下所示:

regexp {^(.*)\..*$} $a match sig
这会给你你想要的结果


检查正则表达式是否良好的一种简单方法是将其指定给字符串:

% set re "^(.*)\..*$"
^(.*)..*$
不完全是我们想要的。。。但这是:

% set re {^(.*)\..*$}
^(.*)\..*$

这就是我们要找的。Tcl中的引号允许替换,而大括号不允许替换。

您的值在捕获组1中。我得到了abcd.q.bis,但我需要abcd.q