У меня есть эта линияКак я могу заставить это регулярное выражение Perl работать?
/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, и извлекает строку I требуется. Как я могу заставить его работать?
EDIT: вот как настроить мой строка:
for(find_indexes(\@lines,"/MDd")) {
my $actual_line = $lines[$_];
$actual_line = modify($actual_line,$additional_defs);
}
find_indexes
возвращает индексы строк, соответствующих любому из параметров после исх массива. Подменю 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";
, но я до сих пор только получить ведущую трубу. Это заставляет меня думать, что что-то действительно может быть ошибочным со струной. Я ничего не могу придумать.
Какой выход? –
Выход «согласован». – Geo