在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
答
正如@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
的级联?
为什么会出现这种问题?无论如何,我不认为这是可能的。
该模式需要用双引号括起来。而std :: string :: find()不支持正则表达式。 –
使用[std :: regex_search](http://en.cppreference.com/w/cpp/regex/regex_search) – Galik