为什么 Boost:正则表达式没有按预期找到所有结果?
Why Boost:Regex not found all results as expected?
我有一个 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();
}
谢谢"第四只鸟"的正确观点。
相关文章:
- Boost program_options将多个配置文件解析结果存储到一个parsed_options中
- 为什么 Boost:正则表达式没有按预期找到所有结果?
- 使用 BOOST property_tree / iostreams / 文件系统 / foreach - 结果出现链接
- boost::d ynamic_bitset 与 std::vector 的结果不一致<bool>?
- boost::variant 当 bool 显示为可能的类型时,会给出错误的结果
- 使用boost ::绑定结果作为参数
- 使用Boost Polygon的减法结果不正确
- Boost Spirit:如何计算某些角色的出现次数,然后将结果放入AST
- 为什么Boost Numeric库通过使用调试或发布模式给出不同的结果
- boost::format给出的结果与圆形不同
- 使用 boost 解析符号链接时,结果不等于原始路径名
- 可能的编译器错误:在两台机器之间使用英特尔编译器的boost bessel函数会产生奇怪的结果
- Boost::短语解析的精神结果
- Boost bjam:将结果与预编译库链接
- 有人能解释boost::thread的意外结果吗
- 带有boost::CRC_32_type的CRC结果与java.util.zip.CRC32不同
- 如何使用boost::any_range连接多个boost范围并作为函数w/o的结果返回
- 将 C++11 正则表达式与 gcc 4.8.2 一起使用时会出现奇怪的结果(但适用于 Boost 正则表达式)
- boost::regex_match给出的结果与许多在线雷格斯测试器不同
- 来自 Boost.Asio 解析器的结果有所不同