Строки с включенной кавычкой не могут соответствовать определенному регулярному выражению
Для следующих строк с включенной кавычкой операторы if не могут совпадать с именами файлов.cpp и.o. Я делаю что-то не так здесь?
E\:\\P4\\NTG5\\PATHOLOGY_products\\arm\-qnx\-m650\-4\.4\.2\-osz\-trc\-dbg\\gen\\deliveries\\ntg5\\arm\\api\\sys\\most\\pf\\mss\\src\\private\\DSIDSYSMOSTServerMoCCAStream\.cpp\
`E\:\\P4\\NTG5\\PATHOLOGY_products\\arm\-qnx\-m650\-4\.4\.2\-osz\-trc\-dbg\\bin\\deliveries\\ntg5\\arm\\api\\sys\\most\\pf\\mss\\src\\DSIDSYSMOSTServerMoCCAStream\.o\`
if ($a_path =~ m/[\\>](\w+\.(?:cpp|c))/) {
$compile_line_array->source_filename($a_path);
$compile_line_array->include_list_index($include_path_cnt);
$j=0;
last;
}
if($a_path =~ m/[\\>](\w+\.(?:o))/) {
$compile_line_array->object_file($a_path);
}
2 ответа
Регулярные выражения соответствуют символу слова, за которым следует .
; если ваши строки имеют обратную косую черту перед каждым .
они не будут совпадать.
Почему-то вы не думаете об этом правильно: "quotemeta" - это не то, что включено или отключено, это оператор, который вставляет обратную косую черту перед некоторыми символами в вашей строке. Почему вы используете его в первую очередь?
Почему ваши имена файлов проходят через quotemeta? Как вы продемонстрировали, это приведет к тому, что все ваши. Поэтому, если это то, с чем вы хотите сравнить, вам нужно добавить некоторые обратные слеши к своему регулярному выражению.
if ($a_path =~ m/[\\>](\w+\\\.(?:cpp|c))/) {
или же
if($a_path =~ m/[\\>](\\\w+\.(?:o))/) {