gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:01:30 24 4
gpt4 key购买 nike

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

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

最佳答案

问题出在行尾。我保存了一个带有 CLRF 行结尾的文件(可能在 Windows 上)。

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

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

关于C++11 简单正则表达式不适用于 gcc 4.9.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25709314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com