无法使用提升正则表达式查找匹配项
Unable to find matches using Boost RegEx
我正在使用boost 1.67.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;
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正则表达式语法。还使用 RegEx101.com 确认,输出正确显示 3 个匹配项,如下所示:
some_0_file.txt
some_1_file.txt
some_2.file.txt
问题
我的代码段或正则表达式有什么问题吗?为什么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()
并添加引号来处理路径中的空格
因为regex_match
只考虑完全匹配。这意味着,您需要在模式中包含./
。此外,您错误地转义了最后一个点。您的模式应该是:
boost::regex pattern("\./some_\d+_file\.txt");
(或者你可以使用.*
作为文件路径的开头,只是不要硬编码./
(
或者,您可以使用regex_search
,如果字符串的一部分与表达式匹配,则返回 TRUE。
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 查找中间两个数字的正则表达式的匹配项
- 无法使用提升正则表达式查找匹配项
- C++11 (MSVS2012) 正则表达式在多行 std::string 中查找文件名
- 如何查找除使用正则表达式定义的句子之外的所有句子
- 提升正则表达式 cpp 用于查找 %% 之间的字符串,输出不包括 % 字符本身
- 仅查找第一个 std::正则表达式有效匹配
- 在Qt Creator中使用正则表达式在多个文件中查找和替换
- 正则表达式.查找所有带有非拉丁字符的单词
- 使用正则表达式查找多个字符串的第一个实例
- 使用正则表达式查找第一个匹配C++索引
- 用于查找函数的正则表达式
- C++ std::正则表达式 查找多个匹配项
- 在字符串正则表达式c++中查找模式
- C++ 基于/使用(提升)正则表达式拆分字符串以查找令牌
- 如何查找给定的字符串是否符合十六进制表示法,例如不带正则表达式的0x34FF
- 用于查找标签/属性的正则表达式在HTML代码中
- 用ICU定义正则表达式负查找的边界
- 如何使用正则表达式查找特殊字符串之间的所有数字
- 正则表达式:查找整数而不是浮点数