我有一个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
复制相似问题