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

Get C++ field using regular expressions in emacs lisp

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

该字段的类型为:

int foo_;

(类型:int,名称:foo

foo<bar> baz_bar_;

(类型: foo<bar>, 名称 baz_bar)

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

类型:

.+(?= .*_;)

姓名:

\w+(?=_;)

问题是 elisp 不支持先行。

我如何将这些正则表达式翻译成与 elisp 兼容的正则表达式?

与其写两个正则表达式,不如写一个正则表达式然后提取子匹配怎么样?我认为这可以解决您的前瞻性问题。而且,如果你需要在不同的地方进行子匹配,不管怎样,只做整个匹配,只提取你需要的部分。

所以类似(未经测试):

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

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

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