c ++ <regex>搜索不匹配</regex>

时间:2014-04-25 20:43:04

标签: c++ regex

我很困惑为什么使用c ++的简单RE搜索无法正常工作。代码是:

    // cliopts.infiledir.c_str() == "./samples/"
    DIR* infiledir = opendir(cliopts.infiledir.c_str());
    struct dirent* dirent = nullptr;
    std::regex infilere (".*");
    if (infiledir != nullptr) {
        while ((dirent = readdir(infiledir)) != nullptr) {
            std::string filename (dirent->d_name);
            if (std::regex_search(filename.begin(), filename.end(), infilere)){
                std::cout << "MATCH " << filename << "\n";
            } else {
                std::cout << "----- " << filename << "\n";
            }
        }
    }

,输出为:

----- .
----- ..
----- lena.jpg
----- sample0001.jpg
----- sample0002.jpg
----- sample0003.jpg
----- sample0004.jpg
----- sample0005.jpg

为了不看,我需要做些什么?


请注意,这是使用g++ -std=c++0x在Arch GNU / Linux上构建和运行的。

1 个答案:

答案 0 :(得分:1)

GNU libstdc++的{​​{1}} 根本不起作用(直到<regex>)。不幸的是,安装4.9g++-4.9或使用libc++ ...这个计划:

boost::regex

其产出:

#include <iostream>
#include <string>
#include <regex>
#include <dirent.h>

using namespace std;

int main() {
    DIR* infiledir = opendir(".");
    struct dirent* dirent = nullptr;
    std::regex infilere (".*");
    if (infiledir != nullptr) {
        while ((dirent = readdir(infiledir)) != nullptr) {
            std::string filename (dirent->d_name);
            if (std::regex_search(filename.begin(), filename.end(), infilere)){
                std::cout << "MATCH " << filename << "\n";
            } else {
                std::cout << "----- " << filename << "\n";
            }
        }
    }
}