0

すべてのUSBドライブがあるディレクトリ/ dev /(Macのim)内に「ディスク」という単語を含むすべてのディレクトリを検索するC ++コードがありますが、実行しているときはQRegExp("disk*")何も見つかりませんが、ターミナルで「マウント」すると、disk1s5 という名前の USB が見つかります。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;
}

終了

4

2 に答える 2

3

グロビング (シェルなどで使用されるワイルドカード) と正規表現を混同しているようです。しかし、それらは同じではありません。

正規表現で*、前の項目が 0 回以上出現することを意味します。そのため、文字列、、などにdisk*一致します。disdiskdiskkdiskkk

disk何か (何もないことを含む) が後に続くことを確認したい場合は、disk.*whereを使用する必要があります。これは、グロビング パターンに正確に対応します。..*disk*

必要に応じて、disk.+for を使用して、diskその後に1回以上出現する任意の文字を続けることもできます(これは、 と比較して、文字列自体disk.*には一致しません)。disk

ドキュメントを読んで、正規表現が実際にどのように機能するかを理解することを強くお勧めします。

于 2013-07-07T11:34:53.967 に答える