emacs regexp替换C函数调用

时间:2012-03-15 12:37:20

标签: c regex emacs

我正在尝试regexp匹配C函数,例如

func(blah blah);

匹配可以包含换行符。

我试过了:

func([.+]);

没有换行,并且:

func([...]);
func([^...]);

两者似乎都没有做任何事情。我想我正在寻找正与我的开场func();之间的任何数字/类型字符匹配的正则表达式部分。

3 个答案:

答案 0 :(得分:4)

您可以尝试func[[:space:]]*([^)]*)。调用中嵌套的parens会让人感到困惑。

答案 1 :(得分:3)

我认为一般情况对于正则表达式是不可行的,因为嵌套函数调用不是regular language

答案 2 :(得分:1)

虽然马克西姆的回答是具体的,但我猜你想要找到你找到的匹配功能。要进行严格的代码处理,您无法击败作为CEDET工具套件一部分的语义分析器。 http://cedet.sf.net也是Emacs的一部分。

如果您在emacs中使用语义解析器,您可以:

M-x semantic-mode RET

然后在代码中:

(semantic-fetch-tags)

(semantic-current-tag)

获取当前标记。获得标签后,您可以致电:

(semantic-tag-function-arguments mytag)

获取参数,这是标记。对于其中一个,请使用semantic-tag-name获取名称,或使用semantic-tag-type获取数据类型。

一旦获得了标签数据,就可以随时使用SRecode编写新代码,SRecode是一个代码生成器,它将接收标签,并吐出代码,例如函数声明。