这对我来说可能是一个非常基本的错误,但我已经被这个问题困住了很长时间,这让我很沮丧!
我正在使用 Perl 遍历 Python 代码文件并识别其变量。我正在使用 Perl 正则表达式来挑选空格之间的字母数字字符的子字符串。正则表达式工作正常并标识匹配项所属的行,但是当我尝试返回与正则表达式匹配的实际子字符串时,捕获变量 $1
未定义。
这是我的正则表达式:
if ($line =~ /.*\s+[a-zA-Z0-9]+\s+.*/) {
print $line;
print $1;
}
这是错误:
x = 1
Use of uninitialized value $1 in print at ./vars.pl line 7, <> line 2.
据我了解,
$1
应该返回 x
.我的代码哪里出错了?
最佳答案
您没有捕获结果:
if ($line =~ /.*\s+([a-zA-Z0-9]+)\s+.*/) {
如果你想匹配像
x = 1
这样的行并获得它的两个部分,您需要匹配并用括号捕获两者。一个粗略的方法:if ( $line =~ /^\s* ( \w+ ) \s* = \s* ( \w+ ) \s* $/msx ) {
my $var = $1;
my $val = $2;
}
关于regex - 正则表达式匹配后未定义 Perl $1 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26084332/