C ++ boost :: regex_match奇怪的行为

时间:2015-06-03 19:56:40

标签: c++ c++11 boost boost-regex

尝试使用boost :: regex_match并得到一个奇怪的行为。

boost::cmatch what;
std::string fn_re_str = R"(\.sig\|\|([a-zA-Z0-9$]+)\()";
boost::regex fn_re(fn_re_str);
if (boost::regex_match("{var d=a[c];if(d.sig||d.s){var e=d.sig||qt(d.", what, fn_re)) {
    std::cout << what[1] << std::endl;
} else {
    std::cerr << "not found" << std::endl;
}
预计会找到

qt

这里找到https://regex101.com/r/iR9rW5/1

为什么boost :: regex_match找不到它?我想念一下吗?

1 个答案:

答案 0 :(得分:3)

regex_match仅匹配完整输入:documentation

  

⚠重要

     

请注意,仅当表达式与整个输入序列匹配时,结果才为真。如果要在序列中的某个位置搜索表达式,请使用regex_search。如果要匹配字符串的前缀,请将regex_search与标记match_continuous设置

一起使用

使用regex_search

<强> Live On Coliru

#include <boost/regex.hpp>
#include <iostream>

int main() {
    boost::cmatch what;
    std::string fn_re_str = R"(\.sig\|\|([a-zA-Z0-9$]+)\()";
    boost::regex fn_re(fn_re_str);
    if (boost::regex_search("{var d=a[c];if(d.sig||d.s){var e=d.sig||qt(d.", what, fn_re)) {
        std::cout << what[1] << std::endl;
    } else {
        std::cerr << "not found" << std::endl;
    }
}

打印

qt