这个正则表达式在c ++中不起作用

时间:2015-06-28 10:43:22

标签: c++ regex

它应匹配"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 个答案:

答案 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