QRegexp匹配

时间:2013-07-02 13:52:30

标签: c++ regex qt qregexp

我想做什么:

  1. 查找autogen_X.c,autogen_X.h或Project name.c类型的所有文件(在根级别的src文件夹中)
  2. 打印出来
  3. 我所拥有的QRegExp是:\ nsrc [^ \ n] *

    我的文字是:

    ####################################################################    
    # Files                                                            #
    ####################################################################
    
    C_SRC +=  \
    src/autogen_init.c \
    src/autogen_init.h \
    src/Project name.c \
    lib/src/acmp.c \
    lib/src/adc.c \
    lib/src/aes.c \`
    
    
    s_SRC +=  \
    Device/Source/G++/startup_32.s
    
    
    S_SRC += 
    

    我的代码

      QRegExp linkRx = QRegExp("src/[^\\n]*");
      linkRx.indexIn(content);
    
      foreach (QString match, linkRx.capturedTexts())
      {
        qDebug() << match;
      }
    

    我得到的输出

    "src/autogen_init.c \" 
    

    这是否与仅以src/开头的所有文件都匹配?

1 个答案:

答案 0 :(得分:0)

你应该预处理文件,它会简化任务:

text.replace("\\\n", " ");

(一行末尾的\表示与下一行连接)。

然后,您可以使用正则表达式(src/[^ ]*)捕获所需内容。请注意括号,以便捕获文本。

此外,此正则表达式将捕获src/adc.c中的lib/src/adc.c。要解决此问题,您可以使用正则表达式排除某些字符在“src”之前,例如:([^a-zA-Z_0-9/]src/[^ ]*)

请注意,它无法匹配带有空格的文件名。顺便说一句,在普通的qmake文件中,带有空格的名称放在引号之间。您无法仅使用regexp正确解析引号。