Les fichiers liste programme suivant dans le répertoire courant dont le nom correspond à l'expression régulière filename_[0-5][34]
:
#include <boost/filesystem.hpp>
#include <boost/regex.hpp> // also functional,iostream,iterator,string
namespace bfs = boost::filesystem;
struct match : public std::unary_function<bfs::directory_entry,bool> {
bool operator()(const bfs::directory_entry& d) const {
const std::string pat("filename_[0-5][34]");
std::string fn(d.filename());
return boost::regex_match(fn.begin(), fn.end(), boost::regex(pat));
}
};
int main(int argc, char* argv[])
{
transform_if(bfs::directory_iterator("."), bfs::directory_iterator(),
std::ostream_iterator<std::string>(std::cout, "\n"),
match(),
mem_fun_ref(&bfs::directory_entry::filename));
return 0;
}
J'omis la définition de transform_if()
par souci de concision. Ce n'est pas une fonction standard, mais elle devrait être simple à mettre en œuvre.
Est-ce un modèle glob? La partie '[4-3]' du motif peut ne pas correspondre à ce que vous attendiez. Il évalue au littéral '[4-3]', ainsi peut-être vous voulez dire '[3-4]' qui signifie 3 ou 4. – wilhelmtell
Oh oui, vrai désolé mon mauvais. – Arman
Je ne suis pas sûr comment 'ls' ressemble à une classe __. Pour moi, il ressemble plus à un algorithme, donc une fonction. – sbi