在 qmake 文件中使用正则表达式
Posted
技术标签:
【中文标题】在 qmake 文件中使用正则表达式【英文标题】:Use regular expression in qmake file 【发布时间】:2021-04-12 10:17:44 【问题描述】:我有这个正则表达式检查我的 cpp 文件中的版本号
QString parseVersion()
// https://regex101.com/r/nFMiA0/1
QRegularExpression reR"((?:(\d+\.[.\d]*\d+)))";
if(auto match = re.match(VERSION); match.hasMatch())
return match.captured();
return "0.0.0";
我想把它移到 pro 文件中,比如
# pseudo code
contains(VERSION, ((?:(\d+\.[.\d]*\d+))))
// yada yada
假设VERSION
带有类似yada-1.2.3
的字符串
如何在 pro 文件中使用正则表达式?
【问题讨论】:
我不知道您是否必须使用捕获组,但您也可以使用\d+(?:\.\d+)+
获得相同的匹配项
看看docs:可以为参数值指定正则表达式。 contains(OSDISTRO, \d+\.[.\d]*\d+)
应该和你的正则表达式一样工作。
@WiktorStribiżew 它不适用于像yada-1.2.3
这样的字符串
好的,.*\d+(?:\.\d+)+
有效吗?
@WiktorStribiżew 确实如此!如果你写一个答案,我会接受它。也许你能解释一下以前的尝试没有奏效吗?我对此有点困惑
【参考方案1】:
看看contains
documentation:
可以为参数值指定正则表达式。
在你的情况下,你可以使用
contains(OSDISTRO, .*\d+(?:\.\d+)+)
...
这里,模式是.*\d+(?:\.\d+)+
,它匹配
.*
- 尽可能多的零个或多个字符
\d+
- 一位或多位数字
(?:\.\d+)+
- 一个或多个点和一个或多个数字的重复。
这也意味着,模式必须匹配整个字符串,这就是之前的尝试失败的原因。
【讨论】:
如果我只提取非贪婪子字符串怎么办? @Moia 根据我在文档中的理解,该方法仅返回 true 或 false。以上是关于在 qmake 文件中使用正则表达式的主要内容,如果未能解决你的问题,请参考以下文章