带有quotemeta的字符串无法匹配特定的正则表达式

时间:2014-03-13 05:44:25

标签: regex perl quotemeta

对于启用了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);
        }

2 个答案:

答案 0 :(得分:2)

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

不知何故,你没有正确地考虑这个问题:“quotemeta”不是启用或禁用的东西,它是一个操作符,在字符串中的某些字符之前粘贴反斜杠。你为什么一开始就使用它?

答案 1 :(得分:0)

为什么你的文件名是通过quotemeta运行的?正如你所展示的那样,那些反斜杠会逃脱你的所有人。因此,如果您想要匹配的内容,则必须在正则表达式中添加一些反斜杠。

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

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