0

私がやろうとしていること:

  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/か?

4

1 に答える 1

0

ファイルを前処理する必要があります。これにより、タスクが大幅に簡素化されます。

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

\行末は次の行と連結することを意味します)。

次に、 regexp で必要なものをキャプチャできます(src/[^ ]*)。テキストをキャプチャするために、括弧に注意してください。

また、この正規表現src/adc.clib/src/adc.c. これを修正するには、「src」の前にある特定の文字を除外する正規表現を使用できます。例: ([^a-zA-Z_0-9/]src/[^ ]*).

ファイル名にスペースが含まれている場合は一致しないことに注意してください。ちなみに、通常のqmakeファイルでは、スペースを含む名前は引用符で囲みます。正規表現だけでは引用符を正しく解析できません。

于 2013-07-02T14:11:43.000 に答える