Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式获取值_Regex_Perl_Tcl - Fatal编程技术网

Regex 使用正则表达式获取值

Regex 使用正则表达式获取值,regex,perl,tcl,Regex,Perl,Tcl,我有一个字符串: set a "ODUCTP-1-1-1-2P1" regexp {.*?\-(.*)} $a match sub 我希望sub的值为1-1-1-2P1 但我得到的是空字符串。有人能告诉我如何正确使用正则表达式吗 $str = "ODUCTP-1-1-1-2P1"; $str =~ s/^.*?-//; print $str; 或: 或: 问题是,*?的不贪婪性稍后会泄漏到*中,这是正在使用的重新引擎的一个特性(自动机理论而不是基于堆栈) 最简单的修复方法是以不同的方式编写正

我有一个字符串:

set a "ODUCTP-1-1-1-2P1"
regexp {.*?\-(.*)} $a match sub
我希望sub的值为1-1-1-2P1

但我得到的是空字符串。有人能告诉我如何正确使用正则表达式吗

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

或:


问题是,
*?
的不贪婪性稍后会泄漏到
*
中,这是正在使用的重新引擎的一个特性(自动机理论而不是基于堆栈)

最简单的修复方法是以不同的方式编写正则表达式。 因为Tcl有未编排的正则表达式(默认情况下)并尽快开始匹配,所以从第一个
-
到字符串末尾的贪婪匹配是完美的(在
-
之后分配所有内容)。这是一个非常简单的RE:
-(.*)
。要使用它,请执行以下操作:

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

注意
--
;这里需要它,因为正则表达式以
-
符号开头,否则会被混淆为怪异(且不受支持)选项。除了这一点,这一切都是直截了当的。

问题是,
*?
的不贪婪性随后会泄漏给
*
,这是正在使用的重新引擎的一个特性(自动机理论而不是基于堆栈)

最简单的修复方法是以不同的方式编写正则表达式。 因为Tcl有未编排的正则表达式(默认情况下)并尽快开始匹配,所以从第一个
-
到字符串末尾的贪婪匹配是完美的(在
-
之后分配所有内容)。这是一个非常简单的RE:
-(.*)
。要使用它,请执行以下操作:

regexp -- {-(.*)} $a match sub
注意
--
;这里需要它,因为正则表达式以
-
符号开头,否则会被混淆为怪异(且不受支持)选项。除了那件小事,一切都是直截了当的