在C++中使用正则表达式查找()

在C++中使用正则表达式查找()

问题描述:

我想使用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

正如@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的级联?

为什么会出现这种问题?无论如何,我不认为这是可能的。