2010-02-23 163 views
2

我有一個程序,我需要能夠使用正則表達式來搜索文件並刪除正則表達式找到的內容。這是我一直在努力代碼:刪除正則表達式匹配

#include <boost/regex.hpp> 
#include <iostream> 
#include <string> 
#include <fstream> 
#include <sstream> 
#include "time.h" 
using namespace std; 


class application{ 
private: 
//Variables 
boost::regex expression; 
boost::smatch matches; 
string line; 
string pat; 
int lineNumber; 
string replace; 
char time[9]; 
char date[9]; 

//Functions 
void getExpression(){ 
    cout << "Expression: "; 
    cin >> pat; 
    try{ 
    expression = pat; 
    } 
    catch(boost::bad_expression){ 
    cout << pat << " is not a valid regular expression\n"; 
    exit(1); 
    } 
} 

void boostMatch(){ 
    //Files to open 
    //Input Files 
    ifstream in("files/trff292010.csv"); 
    if(!in) cerr << "no file\n"; 
    //Output Files 
    ofstream out("files/ORIGtrff292010.csv"); 
    ofstream newFile("files/NEWtrff292010.csv"); 
    ofstream record("files/record.dat"); 
    //time 
    _strdate_s(date); 
    _strtime_s(time); 
    lineNumber = 0; 

    while(in.peek() != EOF){ 
    getline(in, line, '\n'); 
    lineNumber++; 
    out << line << "\n"; 
    if (regex_search(line, matches, expression)){ 
    for (int i = 0; i<matches.size(); ++i){ 

    record << "Date: "<< date << "Time: " << time << "\tmatches[" << i << "]: " << matches[i] << "\n\tLine Number: "<< lineNumber<< '\n\t\t' << line << '\n'; 
    boost::regex_replace(line, expression, ""); 
    newFile << line << "\n"; 
    } 
    }else{ 
    newFile << line << "\n"; 
    } 
    } 
} 

public: 
void run(){ 
    replace = ""; 
    getExpression(); 
    boostMatch(); 
} 
}; 

正如你看到的我是想使用boost :: regex_replace只需更換什麼發現有空格,但沒有奏效。我一直在運行的測試是使用[*]查找列表中某些名稱前的所有星號。示例*愛麗絲。該程序確實找到了明星,但並沒有刪除只是愛麗絲

+0

我不斷嘗試不同的安排和的東西,沒有工作 – shinjuo 2010-02-24 01:03:15

回答

5

看起來的boost :: regex_replace返回一個字符串,而不是修改輸入。見the documentation for this method

試試這個:

newFile << boost::regex_replace(line, expression, "") << "\n"; 
+0

+1:OP代碼肯定是以這種方式破壞的。 – 2010-02-26 20:05:01

+0

完美運作。而這樣一件簡單的事情。非常感謝 – shinjuo 2010-03-01 05:42:19

1

逃脫與* \ *。

+0

因爲*是[]在他的模式,它已經被逐字匹配。 – Segfault 2010-02-26 19:59:22