我从 boost::match_results 类访问子匹配时遇到问题。当我在调试器中检查程序时,match_results::m_subs 数组包含的正是我所期望的:
- [0] 是完全匹配。
- [1] 更进一步的是子匹配。它们完全符合预期。
但是,当我尝试使用 operator[] 和从 1 开始的子匹配索引来访问子匹配时,我没有得到我想要的。原因隐藏在 boost 源码中:
const_reference operator[](int sub) const
{
if(m_is_singular && m_subs.empty())
raise_logic_error();
sub += 2; //< WTF?
if(sub < (int)m_subs.size() && (sub >= 0))
{
return m_subs[sub];
}
return m_null;
}
我对此完全感到困惑。文档说我只是使用 [n] 访问第 n 个子匹配,但在代码中,到处都有这个奇怪的偏移量。
请告诉我我没疯:)
检查增强版本:1.54 和 1.53