我很困惑为什么使用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上构建和运行的。
答案 0 :(得分:1)
GNU libstdc++
的{{1}} 根本不起作用(直到<regex>
)。不幸的是,安装4.9
或g++-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";
}
}
}
}