c++ - regex_match 不产生任何结果

标签 c++ regex

<分区>

我有这段代码片段,是我从网上找到的东西派生出来的:

std::regex pieces_regex("([a-z]+)\\.([a-z]+)", std::regex_constants::basic);
std::smatch pieces_match;
std::string fname = "foo.txt";
cout << " fname " << fname << endl;
if (std::regex_match(fname, pieces_match, pieces_regex)) {
    std::cout << fname << '\n';
    for (size_t i = 0; i < pieces_match.size(); ++i) {
        std::ssub_match sub_match = pieces_match[i];
        std::string piece = sub_match.str();
        std::cout << "  submatch " << i << ": " << piece << '\n';
    }   
} 

pieces_regex 构造函数不适用于我的编译器,所以我不得不更改

std::regex pieces_regex("([a-z]+)\\.([a-z]+)");

std::regex pieces_regex("([a-z]+)\\.([a-z]+)", std::regex_constants::basic);

我的 regex_match 行现在没有返回任何内容,pieces_match 的大小为零。我尝试向 regex_match 添加几个不同的标志,如 basic 或 match_any,但没有帮助。 原始代码可以在这里找到: http://en.cppreference.com/w/cpp/regex/regex_match

有人知道我错过了什么吗?

谢谢!

最佳答案

标准正则表达式(没有第二个“标志”参数)默认使用 ECMA 脚本。试试这个:

std::regex pieces_regex("([a-z]+)\\.([a-z]+)", std::regex_constants::ECMAScript);
//                                                                   ^

你应该会看到一些结果......

编辑: 由于您在使用 ECMA 脚本时遇到问题:您不幸选择了语法:extendedawkegrep 所有人都会像预期的那样吞下你的表情......

关于c++ - regex_match 不产生任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46521417/

相关文章:

c++ - 释放锁时的线程调度

c++ - 将 vector 的特定元素广播到另一个 vector

c++ - boost 灵气 : changing tag of specialized uint_parser

regex - 从R中的字符串中提取模式的多个实例

c - 在 C 中使用 regexec/strtok_r 时出现段错误

c# - Regex.Match 简单数组

php: 从字符串的开头修剪 br 标签?

c++11 可变参数模板编译失败

C++:将类实例存储在分配的内存中

html - HTML 的验证正则表达式