繁体   English   中英

使用正则表达式获取值

[英]Using regex to fetch a value

我有一个字符串:

set a "ODUCTP-1-1-1-2P1"
regexp {.*?\-(.*)} $a match sub

我希望sub的值是1-1-1-2P1

但是我得到空字符串。 谁能告诉我如何正确使用正则表达式?

问题在于.*?的非贪婪性.*? 稍后会泄漏到.* ,这是所使用的RE引擎的功能(自动理论而非基于堆栈的理论)。

最简单的解决方法是以不同的方式编写正则表达式。 因为Tcl具有未锚定的正则表达式(默认情况下)并尽快开始匹配,所以从字符串的第一个-到结尾的贪婪匹配是完美的(在-之后给sub分配了所有内容)。 那是一个非常简单的RE: -(.*) 要使用该功能,请执行以下操作:

regexp -- {-(.*)} $a match sub

注意-- ; 这是必需的,因为正则表达式以-符号开头,否则会混淆为奇怪(且不受支持)的选项。 除了那一个小问题,这完全是直截了当的。

$str = "ODUCTP-1-1-1-2P1";
$str =~ s/^.*?-//;
print $str;

要么:

$str =~ /^.*?-(.*)$/;
print $1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM