QRegexp matching

QRegexp matching

本文关键字:matching QRegexp      更新时间:2023-10-16

我想做的事情:

  1. 查找所有类型为autogen_X.c、autogen_X.h或Project name.c的文件(在根级别的src文件夹中)
  2. 打印出来

我的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/开头的文件?

您应该对文件进行预处理,这将大大简化任务:

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

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

然后,您可以使用regexp (src/[^ ]*)捕获您想要的内容。注意括号,以便捕获文本。

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

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