0

对于启用了引号元的以下字符串,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);
        }
4

2 回答 2

2

正则表达式匹配一个单词字符,后跟一个.; 如果您的字符串在 every 之前有一个反斜杠.,它们将不匹配。

不知何故,您没有正确考虑这一点:“quotemeta”不是启用或禁用的东西,它是一个在字符串中的某些字符之前粘贴反斜杠的运算符。你为什么首先使用它?

于 2014-03-13T06:02:02.547 回答
0

为什么你的文件名通过quotemeta 运行?正如您所展示的,这将反斜杠转义您所有的 . 。因此,如果这是您要匹配的内容,则必须在正则表达式中添加一些反斜杠。

if ($a_path =~ m/[\\>](\w+\\\.(?:cpp|c))/) {

或者

if($a_path =~ m/[\\>](\\\w+\.(?:o))/) {
于 2014-03-13T06:01:50.720 回答