我有一个U盘代码,它会搜索/dev/目录中包含“disk”一词的每个目录(mac上是我的),这是所有C++驱动器所在的位置,但当我执行QRegExp("disk*")时,它找不到任何U盘,但当我在终端中执行“挂载”时,我可以找到我的名为disk1s5的U盘。为什么我在QRegExp上找不到?
#ifdef __APPLE__
DIR *dir = NULL;
dirent *search = NULL;
dir = opendir("/dev/");
if (dir != NULL)
{
while ((search = readdir(dir)) != NULL)
{
QRegExp exp("disk*");
exp.setPatternSyntax(QRegExp::Wildcard);
exp.setCaseSensitivity(Qt::CaseInsensitive);
if (exp.exactMatch(search->d_name))
{
return 0;
} else {
return 2;
}
}
} else {
return 1;
}endif
发布于 2013-07-07 19:34:54
您似乎混淆了globbing (shell等中使用的通配符)和正则表达式。但它们是不同的。
在正则表达式中,*表示前面的项出现零次或多次。因此,disk*匹配字符串dis、disk、diskk、diskkk等。
如果要检查disk后跟任何内容(包括nothing),则必须使用disk.*,其中.表示任何字符,因此.*表示出现零次或多次的任何字符。这与球化模式disk*完全对应。
根据您的需要,您还可以使用disk.+来匹配disk,后跟出现一次或多次的任何字符(与disk.*相比,它不匹配字符串disk本身)。
我强烈建议您阅读documentation以了解正则表达式是如何工作的。
发布于 2013-07-08 16:21:29
如果你只想从/dev中找到所有的disk*目录,并且你使用的是Qt,你可以这样做:
QDir dir("/dev");
QStringList nameFilter = QStringList() << "disk*";
QStringList disks = dir.entryList(nameFilter, QDir::System|QDir::Dirs);
foreach (QString d, disks)
qDebug() << d;https://stackoverflow.com/questions/17511349
复制相似问题