玛雅牛 2009-02-14 13:39
浏览 451
已采纳

如何用正则表达式匹配到C语言中的函数实现部分的函数头部分。

比如
1)
[code="c"]
int test1(int a, int b){
int a;
int b;
}
[/code]
匹配到
[code="c"]int test1(int a, int b){[/code]

2)
[code="c"]
int test1(int a, int b)
{
int a;
int b;
}
[/code]
匹配到
[code="c"]
int test1(int a, int b)
{
[/code]
3)
[code="c"]
int test1(int a,
int b){
int a;
int b;
}
[/code]
匹配到
[code="c"]
int test1(int a,
int b){
[/code]

这个正则表达式该如何写?

  • 写回答

2条回答 默认 最新

  • xenocide 2009-02-14 16:11
    关注

    碰巧前几天写了点代码生成的脚本,以下为一些摘录
    虽然不是很完美,但是大部分情况都能处理
    要完美解析的话,请找yacc

    1.预处理(所有行)
    删除所有块注释: gsub!(/\/*.*?*\//m, '')
    删除逗号后面的换行: gsub!(/\,\s*\n+/m,'')

    2.处理行末
    去掉行末注释: line.sub! /\/\/.*?$/, ''
    去掉行末分号和左大括号: line.sub! /\s*[\;{]?\s*$/, ''

    3.匹配函数
    first_match = (line =~ /([\w:]+)(([^)]*))$/)

    4.if first_match then #结果【modifiers type funname(params[0],params[1]...)】
    prefix = str[0...first_match]
    funname = $1.dup
    params = $2 ? ($2.split ',') : []
    modifiers = prefix[0...(prefix =~ /(\w+\W*)$/)] || ''
    type = $1.dup.gsub ' ',''

    ..#进一步解析modifier,type,funname,params

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)