为什么 Boost:正则表达式没有按预期找到所有结果?

Why Boost:Regex not found all results as expected?

本文关键字:结果 Boost 正则表达式 为什么      更新时间:2023-10-16

我有一个 c++ 示例,我想查找相对 uri 中的所有查询 (如:/class?class_id=-1&course_ref=1&student_ref=2&score_ref=1(。如果它有效,我会找到所有结果:( "class_id=-1" "course_ref=1" "student_ref=2" "score_ref=1: ( 但只找到了"course_ref=1"!这是我的代码:

#include <iostream>
#include <boost/regex.hpp>
int main() {
std::string url = "/class?class_id=-1&course_ref=1&student_ref=2&score_ref=1";
const boost::regex queries_pattern("(?<=(?|&))[a-zA-Z0-9_=-]+");
boost::smatch queries_result;
boost::regex_search(url, queries_result, queries_pattern);
std::string results("");
for (unsigned int i = 0; i <= queries_result.size(); i++) {
if (!queries_result[i].str().empty())
std::cout << queries_result[i] << std::endl;
}
std::cin.get();
}

我还尝试了其他正则表达式模式(没有回头看(,但没有一个有效。我还测试了std::regex和Boost:Xpressive,但没有提取结果。

有谁知道为什么会失败??或者有不同的解决方案?谢谢。

我不知道为什么,但我必须循环迭代器而不是直接循环结果。这是工作代码:

#include <iostream>
#include <boost/regex.hpp>
int main() {
std::string url = "/class?class_id=-1&course_ref=1&student_ref=2&score_ref=1";
const boost::regex pattern("[a-zA-Z0-9_=-]+((?=&)|(?=$))");
boost::sregex_token_iterator iter(url.begin(), url.end(), pattern, 0);
boost::sregex_token_iterator end;
for (; iter != end; ++iter) {
std::cout << *iter << 'n';
}   
std::cin.get();
}

谢谢"第四只鸟"的正确观点。