对于启用了quotemeta的后续字符串,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);
}
答案 0 :(得分:2)
正则表达式匹配单词字符后跟.
;如果您的字符串在每.
之前都有反斜杠,则它们将不匹配。
不知何故,你没有正确地考虑这个问题:“quotemeta”不是启用或禁用的东西,它是一个操作符,在字符串中的某些字符之前粘贴反斜杠。你为什么一开始就使用它?
答案 1 :(得分:0)
为什么你的文件名是通过quotemeta运行的?正如你所展示的那样,那些反斜杠会逃脱你的所有人。因此,如果您想要匹配的内容,则必须在正则表达式中添加一些反斜杠。
if ($a_path =~ m/[\\>](\w+\\\.(?:cpp|c))/) {
或
if($a_path =~ m/[\\>](\\\w+\.(?:o))/) {