我有一个由1和0组成的字符串,例如11101010101011101
,我需要找到重复的01
开始和结束的索引。在此示例中,其3和12
`1 1 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1`
^------REPETITIVE 01-------^
Starts here Ends here
我如何找到索引3和12
string str = "11101010101011101";
regex rx("01+");
vector<int> index_matches; // results saved here
// (should be {2, 8}, but always get only {2})
for(auto it = std::sregex_iterator(str.begin(), str.end(), rx); it != std::sregex_iterator(); ++it)
index_matches.push_back(it->position());
for(int n: index_matches)
{
std::cout << n << '\n';
}
试过这个,但它返回3,5,7,9,11并也返回15,但是我不想要那样。有什么办法可以让我知道2的差在哪里被打破,比如15和11之间的差是4,所以忽略15。
最佳答案
如果您想要最长的匹配项,则需要使用贪婪的正则表达式,还需要括号(01)+
,否则您将搜索01111...。
您可以尝试以下here,它输出
#include <iostream>
#include <regex>
using namespace std;
int main() {
string str = "11101010101011101";
regex rx("(01)+", std::regex::extended);
vector<pair<int, int>> index_matches; // results saved here
for(auto it = std::sregex_iterator(str.begin(), str.end(), rx); it != std::sregex_iterator(); ++it) {
std::smatch match = *it;
index_matches.push_back(make_pair<int, int>(it->position(), it->position() + match.length() -1));
}
for(auto n: index_matches)
std::cout << "(" << n.first << ", " << n.second << ")" << std::endl;
return 0;
}
关于c++ - 在C++中查找匹配项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43390317/