2017-09-04 20 views
-2

我想使用C++解析文本文件,並檢查是否存在特定的PATTERN在C++中使用正則表達式查找()

PATTERN;<n_WhiteSpaces><MACRO>組成。 在我的代碼中,這些MACRO已經在C++ Vector中定義了,我們使用迭代器檢查一行中是否存在這些宏。

vector<string> macroList; 
vector<string>::const_iterator iter; 

macroList.push_back("MACRO1"); 
macroList.push_back("MACRO2"); 
macroList.push_back("MACRO3"); 

string Line; 
getline(*FilePtr, Line); 

for(iter = macroList.begin(); iter != macroList.end(); iter++) 
{ 
    currentpos = Line.find(;<n_WhiteSpaces>*iter); 
} 

現在,我很確定find(;<n_WhiteSpaces>*iter)在語法上是錯誤的。就像我實際需要做的事情一樣,我正在提供這一點。 我的代碼應該返回;的位置,然後是n空格(也可以是0),然後是macroList矢量的任何MACRO。

是否有可能避免串聯兩個字符串;<n_WhiteSpaces> & *iter?請幫我找到regex

Newbie to C++。對不起,如果我的問題聽起來很愚蠢! :P

+0

該模式需要用雙引號括起來。而std :: string :: find()不支持正則表達式。 –

+0

使用[std :: regex_search](http://en.cppreference.com/w/cpp/regex/regex_search) – Galik

回答

0

正如@Galik指出的那樣,您需要使用regex_search函數,下面是一個簡單的代碼,可以幫助您瞭解如何使用它。

for(iter = macroList.begin(); iter != macroList.end(); iter++) 
{ 
    std::regex reg(";[\\s0]+" + *iter); 
    std::smatch m; 

    if (std::regex_search (yourLine, m, reg)) { 
     currentPos = m.position(); 

     break; 
    } 
} 

是它無論如何可能避免兩個字符串;<n_WhiteSpaces> & *iter的級聯?

爲什麼會出現這種問題?無論如何,我不認爲這是可能的。