我有这行代码
/Od /D "WIN32" /D "_DEBUG" /FD /EHa /MDd /Fo"Debug" /Fd"Debug\vc80.pdb" /W3 /c /Zi /clr /TP .\main.cpp"
我想提取.\main.cpp
文件。我认为以下方法可以解决问题:
if($string =~ /.*\s+(.*)$/i) {
print "matched ",$1,"\n";
}
因为这个相同的正则表达式在Ruby中有效,并提取了我需要的字符串。我该如何让它工作?
编辑:这是我设置字符串的方式:
for(find_indexes(\@lines,"/MDd")) {
my $actual_line = $lines[$_];
$actual_line = modify($actual_line,$additional_defs);
}
find_indexes
函数返回与数组引用后的任何参数匹配的行的索引。 modify
子程序将返回一个修改后的字符串版本,其中包含一些附加定义。
编辑2:这是modify
子程序:
sub modify {
my $string = shift;
chomp($string);
my @defines = @_;
if($string =~ /.*\s+(\".*?)$/) {
my $match = $1;
print "match is $match";
my $string_copy = $string;
print "|$string_copy|\n";
}
}
这个子程序并不完整,因为我没能让它按照应该的方式工作。我在捕获组中添加了一个额外的引号来强制匹配名称。但是发生了一些奇怪的事情,我希望$string_copy
的输出会打印出被|包围的原始字符串。然而,我只得到了前导管道符,而没有结尾的那个。我想也许是Perl错误地解释了内插变量,我试图像这样做:
print "|",$string_copy,"|\n";
但是我仍然只得到一个前导管道符。这让我想到字符串可能确实存在问题。我想不出其他原因。