比较qt中的正则表达式

Comparing regex in qt

本文关键字:正则表达式 qt 比较      更新时间:2023-10-16

我有一个正则表达式,我希望它意味着任何扩展名列出的文件:

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

如何比较它在Qt对选定的文件?

您实际的RegEx本身没有双反斜杠(只是当您将其放入字符串字面值时)。如果您希望使用它来匹配完整的文件名,则需要某种通配符。这里有一个语义问题,即您是否希望一个名为"。cpp"的文件匹配。区分大小写呢?

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

。+ ($)( . cpp | ( . cxx美元)| ( c $) | ( . hpp $) | ( . h)美元)

所以这应该可以工作:

QRegExp rx (".+((\.cpp$)|(\.cxx$)|(\.c$)|(\.hpp$)|(\.h$))");
bool isMatch = rx.exactMatch(filename);

但是,随着整个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()));
}