C++ 是否有一个纯正则表达式,在给定一个函数名的情况下,它会在C/C+中捕获具有该名称的函数体+;?
让我们假设我们正在字符串或文件中查找foo的函数体。捕获签名很容易 但是,有一个正则表达式可以捕获函数体。我们不对该功能的内部结构进行任何假设 它可以是扁平的,比如:C++ 是否有一个纯正则表达式,在给定一个函数名的情况下,它会在C/C+中捕获具有该名称的函数体+;?,c++,regex,C++,Regex,让我们假设我们正在字符串或文件中查找foo的函数体。捕获签名很容易 但是,有一个正则表达式可以捕获函数体。我们不对该功能的内部结构进行任何假设 它可以是扁平的,比如: int foo() { return i; } 或者像这样分层的东西: void foo() { if(true) { for (int i=0; i<5; i++ ) { cout<< i << std::endl;
int foo()
{
return i;
}
或者像这样分层的东西:
void foo()
{
if(true)
{
for (int i=0; i<5; i++ )
{
cout<< i << std::endl;
}
}
}
void foo()
{
如果(真)
{
for(inti=0;iRegex不能这样做()
简单的反例:正则表达式不能解析任意嵌套的东西(参见链接),并且
演示可以将函数嵌套在任意深度的函数中
不,由于注释、字符串/字符文本和预处理器的原因,匹配大括号和大括号(除了是regex不能做的另一件事)是不够的。例如:
#define EVIL {
void foo()
{
if (someCondition)
EVIL
// Closing } is inside the ifdef (and we have another one in this comment).
#ifdef SOME_DEFINE
doStuff1("I like strings with unmatched braces }");
} // Who likes trigraphs ??/
doStuff2();
#else
doStuff3();
}
#endif
}
是的,祝你好运
一般来说,C++是很难解析的,我建议使用一个为该工作而建的工具,比如<代码> CLAN/<代码> .< /P>你可以看一下<代码> CTAGS < /C>或<代码> GNGlobal < /Cord>?不,没有办法。编译器前端是解析器的好例子。e解析C++语法,尤其是函数体。如果得到正确的答案大部分时间都是足够好的,那么只需计数<代码> {<代码> >和代码> } /COD>注意避免注释、字符串和字符文字中的出现。不完美,但可能是足够好的。@约翰和预处理器禁用的部分,以及(先前)算上三角图,还有…祝你好运。
#define EVIL {
void foo()
{
if (someCondition)
EVIL
// Closing } is inside the ifdef (and we have another one in this comment).
#ifdef SOME_DEFINE
doStuff1("I like strings with unmatched braces }");
} // Who likes trigraphs ??/
doStuff2();
#else
doStuff3();
}
#endif
}