0

我正在尝试编写QRegExp用于从 qmake 项目代码(* .pro 文件)中提取变量名的代码。
变量使用的语法有两种形式:

  • $$VAR
  • $${VAR}

所以,我的正则表达式必须处理这两种情况。我正在尝试以这种方式编写表达式:

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

但它没有按预期工作:对于字符串$$VAR我有$$V匹配,禁用“贪婪”匹配模式(QRegExp::setMinimal (true))。据我了解,在我的情况下,灰色模式可能会导致错误的结果。
那么,我做错了什么?
或者也许我应该使用贪婪模式而不关心这种行为:)

PS 变量名称不能包含空格和其他“特殊”符号,只能包含字母。

4

1 回答 1

2

您不需要禁用贪婪匹配。如果贪心匹配被禁用,则返回满足您的表达式的最小匹配。在您的示例中,无需匹配AR, 因为$$V满足您的表达。

所以重新打开最小模式,并使用

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

这匹配两个美元符号,后跟一串单词字符,或者大括号之间的一堆单词字符。如果您可以相信您的数据不包含任何不匹配的大括号,那么您的表达式应该也能正常工作。
\w等于[A-Za-z0-9_],因此它匹配所有数字、所有大小写字母和下划线。如果您想将其限制为仅字母表中的字母,请[A-Za-z]改用。

由于变量名不能包含任何特殊字符,所以没有匹配太多的危险,除非一个变量可以直接跟更多的常规字符,这种情况下是不可判定的。
例如,如果数据包含类似 的字符串Buy our new $$Varbuster!,其中$$Var应该是变量,则没有正则表达式可以将变量与字符串的其余部分分开。

于 2014-02-20T09:15:48.707 回答