我正在尝试regexp匹配C函数,例如
func(blah blah);
匹配可以包含换行符。
我试过了:
func([.+]);
没有换行,并且:
func([...]);
func([^...]);
两者似乎都没有做任何事情。我想我正在寻找正与我的开场func(
和);
之间的任何数字/类型字符匹配的正则表达式部分。
答案 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是一个代码生成器,它将接收标签,并吐出代码,例如函数声明。