gpt4 book ai didi

c++ - 无法使用 Boost RegEx 找到匹配项

转载 作者:行者123 更新时间:2023-11-27 22:37:40 26 4
gpt4 key购买 nike

我正在使用 boost 1.67.0 regex 使用以下代码片段在当前文件夹中查找匹配的文件名

boost::filesystem::path p(".");
if(is_directory(p)) {

for(auto& entry : boost::make_iterator_range(boost::filesystem::directory_iterator(p), {})){
std::stringstream ss;
ss << entry;
std::string filename = ss.str();
std::cout << filename << std::endl;
boost::regex pattern("some_\\d+_file\.txt");

if(boost::regex_match(filename, pattern)){
std::cout << "matched" << filename << std::endl;
}
}
}

当前目录的内容,由 std::cout << filename << std::endl; 生成线,是:

"./myApp.out"
"./some_0_file.txt"
"./some_1_file.txt"
"./other_file.txt"
"./some_other_file.txt"
"./some_2_file.txt"

为了确认我的匹配表达式是正确的,我查阅了Perl Regular Expression Syntax .还使用 RegEx101.com 确认了它, 输出正确显示 3 个匹配如下:

some_0_file.txt
some_1_file.txt
some_2.file.txt

问题

我的代码片段或 RegEx 有什么问题吗?为什么 boost::regex_match产生 0 个匹配项?

我错过了什么?

最佳答案

boost::filesystem::path p(".");
if (is_directory(p)) {

for (auto& entry : boost::make_iterator_range(boost::filesystem::directory_iterator(p), {})) {
std::stringstream ss;
ss << entry.path().string(); //2
std::string filename = ss.str();
std::cout << filename << std::endl;
boost::regex pattern(".*some_\\d+_file\\.txt"); //1
if (boost::regex_match(filename, pattern)) {
std::cout << "matched" << filename << std::endl;
}
}
}

1. regex_match只考虑完全匹配

2。 operator<<(std::basic_ostream<Char, Traits>& os, const path& p)将使用 boost::io::quoted()并添加引号以处理路径中的空格

关于c++ - 无法使用 Boost RegEx 找到匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52181884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com