2 ifumi iFuMI 于 2016.03.11 13:15 提问

正则表达式匹配main函数块

请问,用正则表达式怎么匹配主函数块(void main(){.....})?

void show();
void main()
{
for(int i=0; i <5; ++i)
{
show();
}
}
void show()
{
cout <<"ok"<<endl;
}

3个回答

oyljerry
oyljerry   Ds   Rxr 2016.03.11 13:45

主要是要匹配到最后一个},这个用字符串查找处理更简单点

iFuMI
iFuMI 那么多 花(括号,怎么寻找啊。有没有好的思路提供下
接近 2 年之前 回复
WinsenJiansbomber
WinsenJiansbomber   2016.03.11 14:27

正则没有匹配计数器,所以不记录已经匹配的花号数量,所以不能去匹配整个main函数,但头部是可以了。

fateflv
fateflv   2016.03.12 10:56

这个正则能匹配你上面的情况。由于函数的写法很多,情况复杂。如果写得标准的话还好匹配。
建议main函数放在文件的最后,这样就更容易写正则还匹配了,不然main函数后还有其它函数的定义,容易多匹配内容。

 void main\(\)([\s\S]{1})*(([\s\S]}\s?){2}|; \s+})

图片说明

正则说明
图片说明

fateflv
fateflv 回复iFuMI: 像批处理也可以。用这样的形式 findstr "正则表达式" D:\test.c
接近 2 年之前 回复
fateflv
fateflv 回复iFuMI: 也是要通过读取文件的形式。像C++,你可以打开一个文件,读取它的全部内容(其中包括回车换行)并赋值给一个String变量,再将该字符串变量用正则表达式变量进行匹配。
接近 2 年之前 回复
iFuMI
iFuMI 好的,谢谢你。不过我是在windows下实现这个功能
接近 2 年之前 回复
fateflv
fateflv 回复iFuMI: 通过读取文件的方式,把文件内容读出来,再用正则匹配就行了。如:在Linux系统下可通过命令 grep -E '正则表达式' 文件名 来进行匹配
接近 2 年之前 回复
iFuMI
iFuMI 你的表达式写的很好,解释也很清晰,但是有点具体化我这个问题了。假如给定任意.C文件,请问怎么 写匹配整个main函数块的表达式
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!