1

我正在学习 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'

正确的?对于构建这些正则表达式的任何帮助,我将不胜感激!

4

1 回答 1

1

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

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

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

要调试这样的表达式,我推荐使用regexper 之类的工具,它将像上面这样的正则表达式转换为易于理解的铁路图。

于 2013-09-16T18:00:41.990 回答