2015-06-03 70 views
2

嘗試boost :: regex_match並得到一個奇怪的行爲。C++ 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找不到它?我想念什麼?

回答

3

regex_match只匹配整個輸入:documentation

⚠重要

注意,結果爲真只有在表達整個輸入序列的匹配。如果您想在序列中的某處搜索表達式,請使用regex_search。如果你想匹配的字符串的前綴,然後使用regex_searchmatch_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 
+0

哎...只是從perl移植正則表達式,並被'=〜m /.../''m'字母弄糊塗了。 – Zelid