0

QRegExpqmake プロジェクト コード (*.pro ファイル) から変数名を抽出するための を作成しようとしています。
変数の使用法の構文には、次の 2 つの形式があります。

  • $$VAR
  • $${VAR}

したがって、私の正規表現は両方のケースを処理する必要があります。私はこのように表現を書こうとしています:

\$\$\{?(\w+)\}?

しかし、期待どおりに機能しません。文字列の場合、「貪欲」マッチングモードを無効にして一致させました($$VAR)。私が理解したように、私の場合、gready-mode は間違った結果につながる可能性があります。 それで、私は何を間違っていますか? または、貪欲モードを使用する必要があり、この動作を気にしないでください:)$$VQRegExp::setMinimal (true)

PS 変数名には、スペースやその他の「特殊な」記号を含めることはできません。文字のみを使用してください。

4

1 に答える 1

2

貪欲な一致を無効にする必要はありません。貪欲な一致が無効になっている場合は、式を満たす最小限の一致が返されます。あなたの例では、あなたの式を満たすARので、一致する必要はありません。$$V

最小モードをオンに戻し、使用します

\$\$(\w+|\{\w+\})

これは、2 つのドル記号の後に一連の単語文字が続くか、中かっこの間に一連の単語文字が続くものと一致します。データに一致しない中かっこが含まれていないと信頼できる場合は、式も同様に機能するはずです。
\wは と等しいため[A-Za-z0-9_]、すべての数字、すべての大文字と小文字のアルファベット、およびアンダースコアに一致します。これをアルファベットの文字だけに制限したい場合は、[A-Za-z]代わりに を使用してください。

変数名には特殊文字を含めることができないため、変数の直後に通常の文字が続く可能性がある場合を除き、過度に一致する危険はありません。
たとえば、データに のような文字列が含まれている場合、 が変数Buy our new $$Varbuster!$$Varあると想定されている場合、変数を文字列の残りの部分から分離する正規表現はありません。

于 2014-02-20T09:15:48.707 に答える