首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 正则表达式 匹配 ,多谢各位

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

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();

热点排行