正则表达式和Tcl

时间:2013-09-16 17:51:38

标签: regex tcl

我正在学习Tcl和正则表达式。我有一个需要的任务

要执行Tcl脚本并需要一些帮助。

我有一个C ++头文件,我想解析成一个表。这是一个定义常量的文件。

我需要解析两种表单:

const int a = 0x00000001; //Comment for this variable
const int b = 0x00000003; //Comment for this variable

和枚举中的定义如下:

CONSTNAMEA = MACROA | MACROB | 0x000A, //Comment for this variable
CONSTNAMEB = MACROA | MACROB | 0x00C1, //Comment for this variable

在第一组中,我需要替换'='和';'用'|'。这很容易用regsub完成。然而,第二组有点复杂,我似乎无法做到正确。

我希望能够做的是将'CONSTNAMEA','0x000A'以及注释拉出到单独的变量中。

我的想法是我需要三个正则表达式。一个用于解析名称,另一个用于解析数字,第三个用于解析。

The name regex would be "Start at beginning of string and stop at '='"
The number would be '|' {anything} ',' 
And the comment would be "//" {anything} '\n'

正确?我很感激构建这些正则表达式的任何帮助!

1 个答案:

答案 0 :(得分:1)

单个正则表达式应足以捕获该行中的所有三个子字符串:

^\s*([a-zA-Z_]+)\s*=(?:\s*[a-zA-Z_]+\s*\|)*\s*([0-9a-fA-Fx]+),\s*\/\/(.*)$

该名称将作为第一组提供,数字将作为第二组,评论将作为第三组。

为了调试像这样的表达式,我推荐一个像regexper这样的工具,它将上面的正则表达式转换成一个易于理解的铁路图。