C ++ 11简单正则表达式不适用于gcc 4.9.1

时间:2014-09-07 10:36:24

标签: c++ regex gcc c++11

我写的简单正则表达式有问题:

std::regex reg = std::regex("(.*)[a-zA-Z]+(.*)");

它可以在一个简单的程序中工作:

#include <regex>
#include <exception>
#include <iostream>

int main(int argc, char *argv[])
{
  std::regex reg = std::regex("(.*)[a-zA-Z]+(.*)");

  std::string s("string");
  if(std::regex_match(s, reg)){
    std::cout << "MATCH !" << std::endl;
  }
  return 0;
}

但我有一个文件,我想用这个正则表达式来处理它并且它不起作用。文件内容:

313801.91 323277.59 861.89
313770.97 323272.13 868.89
Start
End
313793.19 323290.19 864.89

我的计划:full program code; input file

  ...
  std::ifstream input;
  std::string cell;
  std::regex reg = std::regex("(.*)[a-zA-Z]+(.*)");
  input.open("a.txt", std::ofstream::in);
  while (std::getline(input, cell))
  {
    // reject the row if there is any text in it
    if( std::regex_match(cell, reg) ){
      // never hit!
      continue;
    }
  }
  ...

当我想要打印出来时,我得到了奇怪的结果:

cout << "_____\"" << cell << "\"____" << endl;

"____"Start

1 个答案:

答案 0 :(得分:2)

问题在于行尾。我有一个文件已保存(可能在Windows上)与CLRF行结尾。

我将我的正则表达式更新为此,现在它可以正常工作:

std::regex reg("(.*)[a-zA-Z]+(.*)(\r\n|\n|\r)");