我正在编写一个 perl 脚本来使用正则表达式从 .h 文件中生成 .cpp 文件来查找函数,然后再次使用正则表达式将结果分成两个部分,即返回类型和函数。
我创建了一个正则表达式来查找几乎可以工作的返回类型。
^(\s*&?\w*\s*(\<{1}.*\>{1})*\s)
编辑:我将正则表达式字符串更新为效果更好的字符串,但就这个问题而言,仍然没有任何变化。
这适用于大多数 cpp 原型,例如
int funky();
int funky(int something);
&int funky(int something);
&int <vector *> funky();
在这些情况下,正则表达式匹配
int
int
&int
&int <vector *>
这是完美的,但是在函数参数内部存在匹配的字符串的情况下,例如:
int <vector> funky(int <vector> i);
int <vector> funky(int <vector *> i);
int <vector> funky(const int <vector> i);
正则表达式匹配
int <vector> funky(int <vector>
int <vector> funky(int <vector *>
int <vector> funky(const int <vector>
当我希望它返回时
int <vector>
int <vector>
int <vector>
而且我无法弄清楚它是否继续超过第一个右括号'>'的末尾。我是正则表达式的新手,根本无法弄清楚。
很抱歉有一个答案,我搜索并没有找到一个,可能是因为我什至不知道要查找哪些术语:(。
Edit2:如果这个问题比我预期的更复杂,有人可以解释为什么它会在第一个 <.*> 之后继续吗?我不明白为什么这不起作用。