C++ qt中正则表达式的比较

C++ qt中正则表达式的比较,c++,regex,qt,C++,Regex,Qt,我有一个regex,我希望它是指任何扩展名如下的文件: ((\\.cpp$)|(\\.cxx$)|(\\.c$)|(\\.hpp$)|(\\.h$)) 如何在Qt中将其与所选文件进行比较 您的实际正则表达式本身没有双反斜杠(仅当您将其放入字符串文字时)。如果要使用通配符匹配完整文件名,则需要某种通配符。有一个语义问题,即您是否希望名为just.cpp的文件匹配。那么区分大小写呢 我假设您希望在开头至少有一个字符,并使用+: .+(\.cpp$)|(\.cxx$)|(\.c$)|(\.hpp

我有一个regex,我希望它是指任何扩展名如下的文件:

((\\.cpp$)|(\\.cxx$)|(\\.c$)|(\\.hpp$)|(\\.h$))  

如何在Qt中将其与所选文件进行比较

您的实际正则表达式本身没有双反斜杠(仅当您将其放入字符串文字时)。如果要使用通配符匹配完整文件名,则需要某种通配符。有一个语义问题,即您是否希望名为just.cpp的文件匹配。那么区分大小写呢

我假设您希望在开头至少有一个字符,并使用
+

.+(\.cpp$)|(\.cxx$)|(\.c$)|(\.hpp$)|(\.h$)

因此,这应该是可行的:

QRegExp rx (".+((\\.cpp$)|(\\.cxx$)|(\\.c$)|(\\.hpp$)|(\\.h$))");
bool isMatch = rx.exactMatch(filename);
<>但是,在C++调用和调用的整个C++编译器的表达能力下,使用正则表达式可能会有点令人窒息。如果您编写的代码更像:

bool isMatch = false;

QStringList fileExtensionList;  
fileExtensionList << "CPP" << "CXX" << "C" << "HPP" << "H";

QStringList splitFilenameList = filename.split(".");  
if(splitFilenameList.size() > 1) {
    QString fileExtension = splitFilenameList[splitFilenameList.size() - 1];  
    isMatch = fileExtensionList.contains(fileExtension.toUpper()));
}
bool isMatch=false;
QStringList文件扩展列表;

fileExtensionList@Mat我尝试过exactMatch,但它似乎对我不起作用。我只是希望我提供的正则表达式具有我认为的含义has@Mat好的,回到我的问题,如果exactMatch不行,我该怎么做?