Строки с включенной кавычкой не могут соответствовать определенному регулярному выражению

Для следующих строк с включенной кавычкой операторы 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))/) {
Другие вопросы по тегам