日期:2014-05-17  浏览次数:20796 次

C# 正则表达式 匹配 ,谢谢各位
有C语言写的类文件,就是.h 文件
需要匹配 结构体
如下:
#ifndef _H_ANALYZER_TASK_FILE_
#define _H_ANALYZER_TASK_FILE_

#define   ANALYZER_BUFFER_COUNT             (360)
#define   ANALYZER_DELAY_COUNT              (5)

typedef struct
{
  u8          CallMark;     //因MainTask会监测每一个任务的运行状态,所以定义此变量,做为各任务统一点名标记.
  
  u16         BufferPos;                      //当前Buffer缓冲区存储索引,当大于
  FUEL_POINT  Buffer[ANALYZER_BUFFER_COUNT];
  //最近3小时的所有油位点,以每30秒一个点计算.
  
  FUEL_POINT  DelayOutput[ANALYZER_DELAY_COUNT];    //因需要延时两分钟,所以这些值均被置入到DelayBuffer中.
  
  u16         FuelDifferent[ANALYZER_BUFFER_COUNT - 1];  //用于分析油位趋势的油位值差缓冲区.
  
  FUEL_POINT  Start;    //加减油事件起点.
  FUEL_POINT  End;      //加减油事件终点.
  
}ANALYZER_TASK;

extern OS_STK          AnalyzerTaskStk[ANALYZER_STK_SIZE];

extern void AnalyzerInitial(void);
extern void AnalyzerTask(void * pdata);




 有多个结构体


需要匹配 struct { ....} ANALYZER_TASK; 结构体名字可变的,且有大写,小写,下划线
struct是不可变的。
学过C或者C++ 的明白结构的体的语法。

最终的到字符串是 string[] strs=............
str=strs[0];  "struct { ....} ANALYZER_TASK;"
str=strs[1];  "struct { ....} FUEL_TRACK;"

正则表达式 C# Buffer struct

------解决方案--------------------
试试?
string p = @"struct\s*{(?>[^{}]+
------解决方案--------------------
{(?<Depth>)
------解决方案--------------------
}(?<-Depth>))*}[^;\""{}]*;(?(Depth)(?!))";

------解决方案--------------------
Regex reg=new Regex("(?is)struct.*?{.*?}\\w+;");
string[] result=reg.Matches(yourstr).Cast<Match>().Select(m=>m.Value).ToArray();