它应匹配"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;
}
答案 0 :(得分:4)
您的问题是您的反斜杠正在逃避字符串中的&#39; 1&#39; 1。您需要通知std :: regex将它们视为&#39; \&#39; &#39;第您可以使用原始字符串R&#34;((。+)\ 1 \ 1 +)&#34;或通过转义斜杠来完成此操作,如下所示:
#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