簡體   English   中英

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

[英]C++ boost::regex_match strange behaviour

嘗試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找不到它? 我想念什么嗎?

regex_match只匹配完整的輸入: 文檔

⚠重要

注意,僅當表達式與整個輸入序列匹配時,結果才為true。 如果要在序列中某處搜索表達式,請使用regex_search 如果要匹配字符串的前綴,則將regex_search與標志match_continuous一起使用

使用regex_search

生活在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM