C++为什么boost库中的正则获取到的位置不对
时间: 2024-11-09 08:28:33 浏览: 15
在C++ Boost库中,`boost::sregex_iterator`用于迭代找到的匹配项,但它返回的是正则表达式模式中的第一个匹配,而不是每个匹配位置的起始点。如果你想要获取每个匹配的完整范围,应该使用`boost::match_results`类。例如:
```cpp
#include <iostream>
#include <string>
#include <boost/regex.hpp>
int main() {
std::string input;
std::cout << "请输入一个字符串: ";
std::getline(std::cin, input);
boost::regex pattern("\\b(\\w+)\\b");
boost::smatch match;
boost::match_results<std::string::const_iterator> results(input.begin(), input.end(), pattern, match);
if (results.size()) {
for (const auto& result : results) {
std::cout << "匹配到的单词从位置 " << result.position() << " 到 " << result.length() << ":" << input.substr(result.position(), result.length()) << std::endl;
}
} else {
std::cout << "未找到匹配项" << std::endl;
}
return 0;
}
```
在这个版本中,`result.position()`返回匹配的起始位置,`result.length()`给出匹配的长度。如果想得到每个单词的精确位置,可能需要遍历整个输入串来计算。
阅读全文