使用emacs lisp中的正则表达式获取C ++字段

时间:2015-02-01 21:51:40

标签: regex emacs elisp

我正在尝试使用elisp和正则表达式在C ++中获取类字段的类型和名称

该字段的类型为:

int foo_;

(输入:int,姓名:foo

foo<bar> baz_bar_;

(键入:foo<bar>,名称baz_bar

到目前为止,我得到了这两个正则表达式。

类型:

.+(?= .*_;)

命名

\w+(?=_;)

问题是elisp不支持预测。

我如何将这些正则表达式转换为与elisp兼容的正则表达式?

1 个答案:

答案 0 :(得分:1)

如何编写一个正则表达式然后提取子匹配,而不是编写两个正则表达式?我认为这可以解决你的前瞻问题。并且,如果您需要在不同位置进行子匹配,那么只需完成整个匹配并仅提取您需要的部分。

所以像(未经测试):

\(.+\) +\(.+\)_;

然后要获取类型,使用(match-string 1)或获取名称,请使用(match-string 2)

值得注意的是,一般来说,使用正则表达式无法匹配C ++成员。我相信声明器语法非常复杂,只能使用解析器来完成。