尝试使用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找不到它?我想念一下吗?
答案 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