【发布时间】:2010-06-10 17:10:50
【问题描述】:
我有这条线
/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 返回与数组 ref 后面的任何参数匹配的行的索引。 modify 子将返回发送给它的字符串的修改版本,其中包含一些额外的定义。
EDIT2:这是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";
但我仍然只得到一个领先的管道。这让我认为字符串可能确实有问题。我想不出别的了。
【问题讨论】:
-
输出的“匹配”。