提问者:小点点

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


它应该与“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个答案

匿名用户

您的问题是反斜杠正在转义字符串中的“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 

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(正则表达式|c++|中|不起作用)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?