【发布时间】:2015-06-28 18:57:06
【问题描述】:
它应该匹配 "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;
}
【问题讨论】:
-
请注意,它也匹配
xa。 -
(.+)不就是贪心匹配整个字符串吗?因此\1没有任何意义 -
不要使用
<bits/...>,它不可移植,而且你不能保证它明天能正常工作。此外,您可能需要将 gcc 升级到最新最好的 5.x 版本,较早的版本没有有效的正则表达式实现。 -
使用原始字符串
R"((.+)\1\1+)"或转义反斜杠"(.+)\\1\\1+" -
@Ed,回溯将使
.+连续减少匹配,直到\1匹配为止。这是正则表达式中相当常见的习语。