它应该与“abababab”
匹配,因为“ab”
连续重复两次以上,但代码不打印任何输出。 在C++中使用正则表达式是否还有其他技巧。
我尝试了其他语言,它工作得很好。
#include<bits/stdc++.h>
int main(){
std::string s ("xaxababababaxax");
std::smatch m;
std::regex e ("(.+)\1\1+");
while (std::regex_search (s,m,e)) {
for (auto x:m) std::cout << x << " ";
std::cout << std::endl;
s = m.suffix().str();
}
return 0;
}
您的问题是反斜杠正在转义字符串中的“1”。 您需要通知std::regex将它们视为'\'的。 您可以通过使用原始字符串r“((.+)\1\1+)”或转义斜杠来完成此操作,如下所示:
#include <regex>
#include <string>
#include <iostream>
int main(){
std::string s ("xaxababababaxax");
std::smatch m;
std::regex e ("(.+)\\1\\1+");
while (std::regex_search (s,m,e)) {
for (auto x:m) std::cout << x << " ";
std::cout << std::endl;
s = m.suffix().str();
}
return 0;
}
它产生输出
abababab ab