我正在用C ++阅读.C和.CPP文件。目前使用BOOST进行recursive_directory-iterator。
我的问题是我试图使用正则表达式来提取C文件中的#define变量。但正则表达式根本不匹配。如何regex_match(#define)???
注意:正则表达式只是std :: regex而不是boost :: regex
代码段:
//input stream file
ifstream inFile(path.string(),ios_base::in);
//reading file line by line
while(getline(inFile,readLine))
{
//Excluding comments
if(regex_match(readLine,regex("\\/|;|\\*")))
{
//ignore do nothing
}
else if(regex_match(readLine,regex("#")))
{
cout<<"regex # matched"
}
尝试了regex_match(readLine,regex(&#34;#&#34;),regex_match(readLine,regex(&#34; ^#&#34;),regex_match(readLine,regex(&#34; ^ \#&#34;) - &gt;#并不特别,但仍然只想检查 regex_match(的readLine,正则表达式(&#34;#&#34)
没有比赛..任何人都可以帮忙吗???
编辑:即时通讯使用VS2012,Windows 8
更新:&#34;。#。&#34;效果很好......谢谢大家
在此更新,以便每个像我一样有疑问的人都可以轻松查看..谢谢
答案 0 :(得分:1)
这是document说的:
The entire target sequence must match the regular expression for this function
to return true (i.e., without any additional characters before or after the match).
For a function that returns true when the match is only part of the sequence,
see regex_search.
所以它应该是以下一个匹配整个字符串:
else if(regex_match(readLine,regex(".*#.*")))
或者,如果#
位于该行的开头。
else if(regex_match(readLine,regex("^#.*")))
答案 1 :(得分:1)
尝试正则表达式
&#34;#*&#34;
这个模式将匹配一个#后跟任意数量的字符,直到换行,并且适用于我的所有测试用例(尽管很少),假设我的问题是正确的。